Как улучшить производительность автоматического заполнения JQuery

Вероятно, было бы намного быстрее, если бы у вас был один большой файл вместо множества маленьких. Как правило, это более эффективно. Кроме того, вы можете получить ускорение от простого сохранения массива numpy и загрузки этого файла .npy вместо чтения в большом текстовом файле. Я не так уверен насчет последней части, хотя. Как всегда, когда время вызывает беспокойство, я бы попробовал оба этих варианта, а затем измерил улучшение производительности.

Если по какой-то причине вы не можете просто иметь один большой текстовый файл / файл .npy, вы также можете получить ускорение, используя, например, multiprocessing, чтобы несколько рабочих читали файлы одновременно время. Затем вы можете просто объединить матрицы в конце.


Не ваш основной вопрос, но так как это кажется проблемой - вы можете переписать текстовые файлы, чтобы не было лишних символов новой строки, но я не думаю, что np.loadtxt может их игнорировать. Если вы готовы использовать pandas, то pandas.read_csv с skip_blank_lines=True должны справиться с этим за вас. Чтобы получить numpy.ndarray из pandas.DataFrame, просто сделайте dataframe.values.

47
задан casperOne 1 June 2011 в 05:16
поделиться

5 ответов

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

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

54
ответ дан 26 November 2019 в 19:24
поделиться

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

  1. Во-первых, оптимизируйте ваш запрос и базу данных соединения. Попробуйте сохранить соединение с БД живы с кэшированием памяти.
  2. Используйте методы кэширования результатов, если ваш Служба широко используется для игнорирования повторных выборок.
  3. Используйте клиентский кеш (список JS) для хранения старых запросов на клиенте. Если пользователь печатает обратно и стирает, это будет полезно. Результаты будут поступать из кэша внешнего интерфейса, а не из конечной точки.
  4. Фильтрация регулярных выражений на стороне клиента не будет дорогостоящей, вы можете дать ей шанс.
11
ответ дан 26 November 2019 в 19:24
поделиться

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

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

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

Удачи!

4
ответ дан 26 November 2019 в 19:24
поделиться

Before doing some optimizations you should first analyze where the bottle-neck is. Try to find out how long each step (input → request → db query → response → display) takes. Maybe the CakePHP implementation has a delay not to send a request for every character entered.

5
ответ дан 26 November 2019 в 19:24
поделиться

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

Не используйте PHP / SQL. Мой автозаполнение написано на C ++ и использует хэш-таблицы для поиска. См. Производительность здесь .

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

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

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

4
ответ дан 26 November 2019 в 19:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: