Давайте оптимизируем. Фильтр портала
Добавлено: 27 авг 2018, 05:43
Дано:
Портал,
портал может фильтроваться реляцией или собственным фильтром
Глобальное поле для ввода данных.
Найти:
при вводе данных в глобальное поле, набор данных в портале динамически меняется согласно фильтру. Без необходимости нажимать дополнительные кнопки
Проблема: либо это все будет жутко тормозить, либо ввод данных сбивается (из-за тормозов), либо требуется Commit (то бишь выход из поля и возврат в него), короче, работает некрасиво.
Как сделать оптимально?
Видел такие решения:
при каждом нажатии символа содержимое поля передается параметром в скрипт PSOS (без ожидания), на сервере поиск обрабатывается, результат вставляется в хранимое поле, по которому организована реляция в портале. Пользователь вводит, портал асинхронно фильтруется. Красиво, но громоздко и все-таки PSOS, локально работать не будет.
Триггер в глобальном поле - рекурсивный, вызывает сам себя с задержкой в одну секунду командой Install On Timer (с флагом). При быстром вводе символов в глобальное поле он не успевает исполниться, получается серия команд Install, каждая последующая отменяет предыдущую. И лишь когда пользователь перестает стучать по клаве, срабатывает таймер, а в этом случае по флагу исполняется основная функция скрипта - происходит обновление портала.
Кто как красиво реализовывал? как сделать быстро? Как сделать без коммита и тормозов?
Портал,
портал может фильтроваться реляцией или собственным фильтром
Глобальное поле для ввода данных.
Найти:
при вводе данных в глобальное поле, набор данных в портале динамически меняется согласно фильтру. Без необходимости нажимать дополнительные кнопки
Проблема: либо это все будет жутко тормозить, либо ввод данных сбивается (из-за тормозов), либо требуется Commit (то бишь выход из поля и возврат в него), короче, работает некрасиво.
Как сделать оптимально?
Видел такие решения:
при каждом нажатии символа содержимое поля передается параметром в скрипт PSOS (без ожидания), на сервере поиск обрабатывается, результат вставляется в хранимое поле, по которому организована реляция в портале. Пользователь вводит, портал асинхронно фильтруется. Красиво, но громоздко и все-таки PSOS, локально работать не будет.
Триггер в глобальном поле - рекурсивный, вызывает сам себя с задержкой в одну секунду командой Install On Timer (с флагом). При быстром вводе символов в глобальное поле он не успевает исполниться, получается серия команд Install, каждая последующая отменяет предыдущую. И лишь когда пользователь перестает стучать по клаве, срабатывает таймер, а в этом случае по флагу исполняется основная функция скрипта - происходит обновление портала.
Кто как красиво реализовывал? как сделать быстро? Как сделать без коммита и тормозов?