Как быстрее запросить длинный список данных в JavaScript? - PullRequest
1 голос
/ 09 июля 2011

Вот что я хотел бы сделать, у меня есть файл, который выглядит примерно так: «ключ» - «контент», каждый «ключ» не уникален для контента, один ключ может иметь ноль или более контента, которыймного .... Файл размером около 200 Кб, я конвертирую его в массив и помещаю все это в javascript.При вводе пользователем я зацикливаю массив один раз, чтобы узнать результат, но он медленный ... Есть предложения, как это сделать?Спасибо.

(разрешена только реализация JavaScript на стороне клиента, не разрешается использовать сервер для анализа результата и отправки обратно.)

Ответы [ 3 ]

2 голосов
/ 09 июля 2011

Я предполагаю, что пользователь печатает что-то, что должно соответствовать «ключу»? Или «контент»?

Предполагая, что это ключ, затем сортируйте ключи и используйте двоичный поиск. Как только вы получили удар (предполагая частичное совпадение, например, первую букву), просто продолжайте сканирование, пока совпадения не пройдут. Это ваш набор результатов.

Если вы запрашиваете контент, то это та же предпосылка, но вам нужно инвертировать индекс, сделать контент частью ваших ключей и отсортировать их.

2 голосов
/ 09 июля 2011

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

Часть 1: Поиск в словаре в JavaScript
Часть 2: Анализ производительности JavaScript Trie

2 голосов
/ 09 июля 2011

Можно ли использовать ассоциативный массив с уникальными ключами, указывающими на массивы возможных значений?

{ 'key1' => ['value1','value2','value3'],
  'key2' => ['value1','value2'],
  'key3' => ['value1'],
}

Это значит, что анализ списка будет занимать больше времени, но я уверен, что поиск в списке будет намного быстрее. Он также должен использовать меньше памяти, так как вы не дублируете все дублирующиеся ключи в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...