Подтвердить что ты не робот

Как повысить производительность автозаполнения JQuery

Я планировал использовать автозаполнение jquery для сайта и внедрил тестовую версию. Im теперь использует вызов ajax для извлечения нового списка строк для каждого ввода символа. Проблема в том, что он становится довольно медленным, за 1,5 с до заполнения нового списка. Каков наилучший способ быстро сделать автозаполнение? Я использую cakephp и просто занимаюсь поиском и с лимитом в 10 предметов.

4b9b3361

Ответ 1

Эта статья - о том, как flickr делает автозаполнение - очень хорошее чтение. У меня было несколько "вау", которые он читал.

"Этот виджет загружает список всех ваших контактов, в JavaScript, в до 200 мс (это верно даже для члены с более чем 10 000 контактов). В чтобы получить этот уровень производительности, нам пришлось полностью переосмыслить, как мы отправляем данные из сервер к клиенту."

Ответ 2

Попробуйте предварительно загрузить объект списка вместо выполнения запроса "на лету".

По умолчанию автозаполнение имеет задержку 300 мс.
Возможно, удалите задержку

$( ".selector" ).autocomplete({ delay: 0 });

Ответ 3

1,5-секундные интервалы являются очень широкими пробелами для обслуживания автозаполнения.

  • Сначала оптимизируйте свой запрос и db соединения. Попробуйте сохранить соединение с db живое с кэшированием памяти.
  • Используйте методы кэширования результатов, если служба сильно используется, чтобы игнорировать повторные выборки.
  • Используйте кеш-клиент (список JS) для хранения старых запросов на клиенте. Если пользователь вводит обратно и стирается, это будет полезно. Результаты будут получены из кеша frontend вместо базовой точки.
  • Фильтрация регулярных выражений на стороне клиента не будет дорогостоящей, вы можете дать ей шанс.

Ответ 4

Прежде чем делать некоторые оптимизации, вы должны сначала проанализировать, где находится горло. Попытайтесь выяснить, как долго проходит каждый шаг (ввод → запрос → запрос db → ответ → отображение). Возможно, реализация CakePHP имеет задержку, чтобы не отправлять запрос для каждого введенного символа.

Ответ 5

Реальная проблема для скорости в этом случае, я считаю, - это время, необходимое для запуска запроса в базе данных. Если нет возможности повысить скорость вашего запроса, то, возможно, расширение вашего поиска, чтобы включить больше элементов с некоторыми высоко оцененными результатами, вы можете выполнить один поиск по каждому другому персонажу и фильтровать по результатам 20-30 на стороне клиента.

Это может улучшить внешний вид производительности, но через 1,5 секунды я сначала попытаюсь улучшить скорость запроса.

Кроме того, если вы можете дать нам дополнительную информацию, я могу дать вам более конкретный ответ.

Удачи!

Ответ 6

Сторона сервера на PHP/SQL работает медленно.

Не используйте PHP/SQL. Моя автозаполнение написано на С++ и использует hashtables для поиска. См. Производительность здесь.

Это компьютер Celeron-300, FreeBSD, Apache/FastCGI.

И, видите ли, быстро бегает по огромным словарям. 10 000 000 записей не проблема.

Кроме того, поддерживает приоритеты, динамические переводы и другие функции.

Ответ 7

Автозаполнение само по себе не медленное, хотя ваша реализация, безусловно, может быть. Первое, что я хотел бы проверить, это значение параметра задержки (см. JQuery docs). Затем я проверил бы ваш запрос: вы могли бы вернуть только 10 записей, но вы делаете огромное сканирование таблицы, чтобы получить эти 10 записей? Вы возвращаете тонну записей из базы данных в коллекцию, а затем берете 10 элементов из коллекции, а не выполняете подкачку на стороне сервера в базе данных? Простой индекс может помочь, но вам нужно будет провести некоторое тестирование, чтобы быть уверенным.