Самая эффективная живая техника поиска для мобильного сафари - PullRequest
1 голос
/ 31 августа 2011

Я создаю мобильное веб-приложение, предназначенное для работы с webkit.У меня есть требование выполнить поиск в реальном времени (при нажатии клавиш) по базе данных ~ 5000 пользователей.

Я пробовал несколько различных методов:

  1. При загрузке страницы,сделать вызов AJAX, который загружает в память представление всех 5000 пользователей, и запросить их у клиента.Я попытался отправить JSON, который оказался слишком большим, а также пользовательскую строку с разделителями, которая затем была проанализирована с помощью split ().Это было лучше, но в конечном итоге поиск по этому массиву пользователей был медленным.
  2. Я попытался использовать обычный вызов AJAX, который бы возвращал пользователей на основе запроса, также используя метод строки с разделителями.Это было лучше, но я был вынужден настроить его так, чтобы поиск выполнялся только с минимум 3 символами.Это не оптимально, так как я хотел бы иметь возможность начать фильтрацию после 1 символа.Я мог также регулировать вызовы, чтобы не каждое нажатие клавиши в пределах определенного порога вызывало запрос.Это может помочь с производительностью, но я бы предпочел не возиться с подобными вещами.

Мобильный Facebook делает это очень хорошо, если вы попытаетесь найти их друзей.Поиск происходит мгновенно и запускается после 1 символа.

Мой вопрос: есть ли у кого-нибудь предложения по ускоренному поиску мобильного приложения в реальном времени?Должен ли я смотреть на localStorage?Это надежно, выполнимо?

1 Ответ

0 голосов
/ 31 августа 2011

Есть ли причина, по которой вы не можете использовать бинарный поиск?Имена, которые вы ищете, должны быть в блоке.Если вам нужен поиск по имени и фамилии, вы можете создать вторую копию данных, отсортированных по фамилии, и просмотреть их в обоих наборах.

Некоторые полезные, но более сложные структуры данных, которые решают этот тип проблемы, включают:

http://en.wikipedia.org/wiki/Directed_acyclic_word_graph http://en.wikipedia.org/wiki/Trie

...