2016-10-18 2 views
0

У меня есть webapp с полем ввода, которое должно быть заполнено областью пользователя в соответствии с ISO3166-2. Чтобы улучшить работу с пользователем, я хочу сделать это поле автозаполнением - пользователь начинает печатать и получает предложения. Существует также поле страны, которое, если оно будет заполнено, ограничит количество регионов, предлагаемых регионам из выбранной страны.Эффективный способ поиска предложений автозаполнения в большом массиве

Список регионов - это довольно большой объем данных, который включает в себя названия регионов и коды для всех официально признанных стран мира, а его площадь составляет около 250 КБ.

Те из вас, у кого был подобный опыт, какие из следующих способов его реализации вы бы рекомендовали достичь наилучшей производительности и почему?

1) не отправляйте клиенту весь список регионов и делайте запрос на сервер, а не каждый раз, когда пользователь вводит в поле региона (отмените его, конечно), поэтому мы ищем предложения на стороне сервера, но имеем дополнительные обратные вызовы ;

2) используйте веб-сайт, чтобы найти предложения;

3) smth else?

+0

Для большого набора данных, то лучше получать данные с помощью Ajax, есть библиотека JQuery, которая может помочь. https://github.com/devbridge/jQuery-Autocomplete –

+0

@KhorshedAlam спасибо! Я использую реакцию, поэтому я не ищу плагины jquery, но меня интересует вообще, действительно ли запросы ajax действительно стоят для наборов данных такого размера? –

+0

Независимо от того, хотите ли вы сохранить данные на сервере или загрузить все для скорости, я бы построил его с помощью дерева поиска (https://en.wikipedia.org/wiki/Search_tree). –

ответ

0

У вас может быть ассоциативный массив с ключами как имя региона (или несколько похожее), то вы можете иметь массив, заполненный из бэкэнд в соответствии с логикой.

  1. Двоичный поиск массива, используя ключевое слово набранного
  2. Если существует данные, а затем заполнить автозаполнение или же заполнить массив из данных серверных.

Вы должны написать код для поддержания массива самостоятельно.

Или вы можете сэкономить свое время, используя что-то вроде Twitter typeahead с Bloodhound с предварительной выборкой, интеллектуальным кэшированием, быстрым поиском и засыпкой удаленных данных.

Вот ссылка: https://github.com/twitter/typeahead.js

+0

Действительно ли это более результативно, чем обычный 'Array.prototype.find'? –

+0

Array.prototype.find был добавлен в ECMAScript 2015 и может быть недоступен во всех браузерах. Однако, если вы посмотрите на полиполк, предоставленный MDN, он выполняет линейный поиск, тогда как двоичный поиск выполняется быстрее. Кроме того, вы можете ознакомиться с этой ссылкой для методов поиска: http://www.andygup.net/fastest-way-to-find-an-item-in-a-javascript-array/ – arnabkaycee

Смежные вопросы