Вопрос

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

Три поля этой формы требуют значения из подмножества общего источника данных (SQL Table). Я использовал jQuery и jQuery ui, чтобы построить автозаполнение, к которому посты в общем HTTPhandler.

Внутренне обработчик использует Linq-to-sql, чтобы получить данные, необходимые из этой конкретной таблицы. Стол имеет около 10 различных столбцов, а выражение LINQ использует SQLMethods.like (), чтобы соответствовать единому запросу поиска на каждом из этих 10 полей.

Проблема в том, что эта таблица содержит несколько строк 20 тысяч. Автозаполнение работает безупречно, принять чистый объем данных вводит выделение, вблизи 6 секунд или около того (при отладке на моей местной машине) до того, как оно появится.

AutoComplete AutoComplete jqueryui имеет 0 задержку, запросы на 3 клавиши, и результат поста выполнен в стиле в стиле Facebook. (Мне почти пришлось переписать автозаполненный плагин ...).

Таким образом, проблема в данных против скорости. Любые мысли о том, как ускорить это? Единственные две мысли, которые я имел, чтобы кэшировать данные (как / где?); Или используйте прямой считыватель данных SQL для доступа к данным?

Благодарим за любую идею! Спасибо,

<bleepzter/>
Это было полезно?

Решение

Я бы посмотрел только на возвращение первого x количество строк, используя .Take(10) метод linq. Это должно перевести в Sensbile SQL Call, который будет намного меньше нагрузки на вашу базу данных. Поскольку типы пользователей они найдут меньше и меньше совпадений, поэтому они будут видеть только эти данные, которые им требуют.

Я обычно считаю, что 10 товаров достаточно для того, чтобы пользователь понять, что происходит и до сих пор добраться до данных, которые им нужно быстро (см. Бар поиска Amazon.com для примера).

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

Другие советы

Возвращая результаты Top N - это хорошая идея наверняка. Мы нашли (запрашивая потенциальный список 270к), которые возвращают топ-30, является лучшей ставкой для пользователя, находящегося, что они ищет, но полностью зависит от данных, которые вы запрашиваете.

Кроме того, вы действительно должны отказаться от задержки в чем-то разумной, как 100-300 мс. Когда вы устанавливаете задержку до нуля, как только вы попадаете на триггер 3 символа, эффективно каждый. ОДИН. КЛЮЧ. ИНСУЛЬТ. отправляется как новый запрос к вашему серверу. Это может легко иметь непреднамеренный и нежелательный эффект замедления реакции еще больше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top