Давайте оптимизируем. Фильтр портала

Практические советы по работе с FileMaker, типичные задачи и их решения. У вас вопрос? Пишите сюда.
Ответить
andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Давайте оптимизируем. Фильтр портала

Сообщение andrey volkov » 27 авг 2018, 05:43

Дано:

Портал,
портал может фильтроваться реляцией или собственным фильтром
Глобальное поле для ввода данных.

Найти:
при вводе данных в глобальное поле, набор данных в портале динамически меняется согласно фильтру. Без необходимости нажимать дополнительные кнопки

Проблема: либо это все будет жутко тормозить, либо ввод данных сбивается (из-за тормозов), либо требуется Commit (то бишь выход из поля и возврат в него), короче, работает некрасиво.
Как сделать оптимально?

Видел такие решения:
при каждом нажатии символа содержимое поля передается параметром в скрипт PSOS (без ожидания), на сервере поиск обрабатывается, результат вставляется в хранимое поле, по которому организована реляция в портале. Пользователь вводит, портал асинхронно фильтруется. Красиво, но громоздко и все-таки PSOS, локально работать не будет.

Триггер в глобальном поле - рекурсивный, вызывает сам себя с задержкой в одну секунду командой Install On Timer (с флагом). При быстром вводе символов в глобальное поле он не успевает исполниться, получается серия команд Install, каждая последующая отменяет предыдущую. И лишь когда пользователь перестает стучать по клаве, срабатывает таймер, а в этом случае по флагу исполняется основная функция скрипта - происходит обновление портала.


Кто как красиво реализовывал? как сделать быстро? Как сделать без коммита и тормозов?

Аватара пользователя
Arcady
Администратор
Сообщения: 201
Зарегистрирован: 10 сен 2017, 20:45
Контактная информация:

Re: Давайте оптимизируем. Фильтр портала

Сообщение Arcady » 29 авг 2018, 21:01

в первом варианте вам все равно нужен комит, иначе портал не обновится.
Как сделать без коммита и тормозов?
html-таблицу на веб-вьюеере ;)
Аркадий Перла.
ТриА. Разработка решений для FileMaker
http://tria.pw

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Давайте оптимизируем. Фильтр портала

Сообщение andrey volkov » 30 авг 2018, 08:10

html-таблицу на веб-вьюеере
да, это тоже вариант, кстати

без коммита я бы поигрался настройкой фильтра через глобальную переменную, а не через поле. То есть, к примеру, данные из поля я записываю в глобальную переменную и затем обновляю портал, который чувствителен именно к глобальной переменной. Но мне этот способ кажется сложноватым

Alexei Sytch
Сообщения: 106
Зарегистрирован: 21 сен 2017, 18:48
Откуда: Минск

Re: Давайте оптимизируем. Фильтр портала

Сообщение Alexei Sytch » 04 сен 2018, 13:05

При работе с сервером: фильтр портала, насколько я понимаю, тянет сначала все данные для отображения портала т.е. по реляции (а это можте быть много записей) а потом скрывает при отображении те, что попадают под фильтр. Для больших список предпочтительнее фильтр через реляцию. Я пользуюсь описанным вами тригером в глобальном поле.

При этой технике более гибкий поиск у меня получался (например с исключениями или по отдельным полям), когда я использовал не фильтр портала, а обычный ListView и режим Find через скрипты в специальном окне (например CardView). Мне было удобно, что можно было в зависимости от количества найденных записей переходить на разные макеты (найдена одна запись- к карточке, найдено несколько - к списку, ничего не найдено - предложение ввести новую)

Аватара пользователя
Arcady
Администратор
Сообщения: 201
Зарегистрирован: 10 сен 2017, 20:45
Контактная информация:

Re: Давайте оптимизируем. Фильтр портала

Сообщение Arcady » 06 сен 2018, 19:20

Кажется у Soliant было целое исследование, они сравнивали разные способы нахождения списка id записей, победитель не выявился, зависит и от количества записей вообще, и от того сколько записей находится. Если нашлось тысячи записей, то собрать "айдишки" в кучу тоже занимает время.
Аркадий Перла.
ТриА. Разработка решений для FileMaker
http://tria.pw

Ответить