Я планировал использовать автозаполнение jquery для сайта и внедрил тестовую версию. Im теперь использует вызов ajax для извлечения нового списка строк для каждого ввода символа. Проблема в том, что он становится довольно медленным, за 1,5 с до заполнения нового списка. Каков наилучший способ быстро сделать автозаполнение? Я использую cakephp и просто занимаюсь поиском и с лимитом в 10 предметов.Как повысить производительность автозаполнения JQuery
ответ
This article - о том, как flickr делает автозаполнение очень хорошо читать. У меня было несколько «вау», которые он читал.
«Этот виджет загружает список всех ваших контактов, в JavaScript, в под 200мс (это верно даже для членов с 10,000+ контактами). В для того, чтобы получить такой уровень производительности , мы должны были полностью отказаться от того, как мы отправляем данные с сервера клиенту ».
Реальная проблема для скорости в этом случае, я считаю, это время, необходимое для запуска запроса в базе данных. Если нет возможности повысить скорость вашего запроса, то, возможно, расширение вашего поиска, чтобы включить больше элементов с некоторыми высоко оцененными результатами, вы можете выполнить один поиск по каждому другому персонажу и фильтровать по результатам 20-30 на стороне клиента.
Это может улучшить внешний вид производительности, но в 1,5 секунды я бы попытался улучшить скорость запроса.
Кроме этого, если вы можете дать нам дополнительную информацию, я могу дать вам более конкретный ответ.
Удачи вам!
Да, я собирался предложить это тоже .. Сделайте некоторые фильтрации на стороне клиента. – Niyaz
Чувак! Используйте SOLR. Вы можете напрямую нажать URL. Я только что закончил его интеграцию в проект, и это решит ваши проблемы с db-запросом. Вы даже можете загрузить данные в SOLR из MySQL (который я предположил из cakephp). – Ligemer
1,5-секундные интервалы - это очень широкие промежутки для обслуживания автозаполнения.
- Во-первых, оптимизируйте свой запрос и db соединений. Попробуйте сохранить ваше соединение db с кэшированием памяти.
- Использовать методы кэширования результатов, если ваш сервис очень часто используется для игнорирования повторных выборок.
- Используйте клиентский кеш (список JS) для хранения старых запросов на клиенте. Если пользователь вводит обратно и стирается, это будет полезно. Результаты будут получены из кеша frontend вместо базовой точки.
- Фильтрация регулярных выражений на стороне клиента не будет дорогостоящей, вы можете дать ей шанс.
Прежде чем делать некоторые оптимизации, вы должны сначала проанализировать, где находится горло бутылки. Попытайтесь выяснить, как долго проходит каждый шаг (ввод → запрос → запрос db → ответ → отображение). Возможно, реализация CakePHP имеет задержку, чтобы не отправлять запрос для каждого введенного символа.
Сторона сервера на PHP/SQL работает медленно.
Не используйте PHP/SQL. Моя автозаполнение написано на C++ и использует hashtables для поиска. См. Производительность here.
Это компьютер Celeron-300, FreeBSD, Apache/FastCGI.
И, видите ли, быстро бегает по огромным словарям. 10 000 000 записей не проблема.
Также поддерживает приоритеты, динамические переводы и другие функции.
Автозаполнение само по себе не является медленным, хотя ваша реализация, безусловно, может быть. Первое, что я хотел бы проверить, это значение параметра задержки (см. JQuery docs). Затем я проверил бы ваш запрос: вы могли бы вернуть только 10 записей, но вы делаете огромное сканирование таблицы, чтобы получить эти 10 записей? Вы возвращаете тонну записей из базы данных в коллекцию, а затем берете 10 элементов из коллекции, а не выполняете подкачку на стороне сервера в базе данных? Простой индекс может помочь, но вам нужно будет провести некоторое тестирование, чтобы быть уверенным.
Попробуйте предварительно загрузить объект списка вместо выполнения запроса на лету.
Также автозаполнение имеет задержку 300 мс по умолчанию.
Возможно удалить задержку
$(".selector").autocomplete({ delay: 0 });
+1 для задержки. Я забыл, что это одна из причин. Я не знаю, почему время задержки по умолчанию составляет 300 мс, но не 0 мс. – 2013-01-21 17:37:57
+1 здесь, если ваши запросы в порядке. Если ваши запросы занимают много времени для 10 элементов списка, то что-то не так с вашими запросами, и это не тот ответ, который вам нужен. – Ligemer
Официальный JQuery, который говорит значение по умолчанию для опции задержки https://api.jqueryui.com/autocomplete/#option-delay –
- 1. Как повысить производительность jQuery
- 2. Как повысить производительность запросов?
- 3. Как повысить производительность MongoDB
- 4. Как повысить производительность памяти?
- 5. Как повысить производительность .NET?
- 6. Gatling - как повысить производительность
- 7. javascript - как повысить производительность?
- 8. Как повысить производительность приложения
- 9. Как повысить производительность процедуры
- 10. Как повысить производительность запросов
- 11. Как повысить производительность в HighCharts
- 12. Как повысить производительность этого запроса?
- 13. Как повысить производительность скрипта поиска?
- 14. Как повысить производительность хранимой процедуры?
- 15. Как повысить производительность вызова API
- 16. Как повысить производительность этого скрипта?
- 17. SQL Server: как повысить производительность
- 18. Как повысить производительность хранения данных?
- 19. Как повысить производительность следующего кода?
- 20. Как повысить производительность чтения AeroSpark?
- 21. Как повысить производительность одностраничного приложения?
- 22. Индексы MySQL - как повысить производительность?
- 23. Как повысить производительность этого запроса?
- 24. Как повысить производительность NLTK? альтернативы?
- 25. Как повысить производительность приложения WPF
- 26. Как повысить производительность RelativeSource FindAncestor?
- 27. Как повысить производительность вложенного запроса?
- 28. Как повысить производительность sql-запроса?
- 29. Алгоритм ранцевания, как повысить производительность?
- 30. Как повысить производительность рендеринга изображения?
Включена ли 1.5s время ожидания автозавершения (то есть, время, он ждет, чтобы убедиться, что вы не вводить дополнительные символы)? – Powerlord
Как выглядит этот запрос? 1.5s для 10 предметов смехотворно медленны. См. Мой другой комментарий ниже о SOLR. Работали как шарм для нас с миллионами строк, чтобы пройти. – Ligemer
Лучшее улучшение ... используйте выбранный плагин jquery! –