хотелось бы, чтобы ваши мысли об этом.
Я использую автозаполнение jQuery в приложении ASP.NET MVC для получения списка записей из базы данных - я хотел бы знать, если есть лучший способчем то, как я сейчас это делаю - следующим образом:
Вот jQuery (я вызываю метод действия 'GetRecordByName' с автозаполнением)
$('#tb_name').autocomplete({
source: 'Home/GetRecordByName',
minLength: 1, delay: 0,
select: function (event, ui) {
// do stuff
}
});
В конце,Я использую Linq to Entities в методе для получения результатов из базы данных:
public JsonResult GetRecordByName(string term)
{
var data = records
.Where(dr => dr.Key.StartsWith(term))
.Select(dr => new { dr, value = dr.Key })
.Take(5);
return Json(data, JsonRequestBehavior.AllowGet);
}
В настоящее время он работает немного медленно (~ 1-2 секунды).По сути, в БД содержатся десятки тысяч записей, и каждый раз, когда вы вводите символ в текстовое поле, приложение обращается к базе данных.Я могу установить его на 2 или 3 символа, но он не меняет скорость, и при этом я не хочу требовать такого количества символов.
У меня есть идея, как его оптимизировать: при загрузке страницы получите всевозможные результаты из БД и отправка их клиенту (через скрытый ввод или структуру данных javascript), а также автозаполнение использует эти данные на стороне клиента в качестве источника.Я уверен, что это будет молниеносно, но мне кажется странным - есть ли какие-либо недостатки в этом?
Есть ли другие способы добиться более быстрого автозаполнения?
ОБНОВЛЕНИЕ: Хорошо, очевидно, проблема заключалась в том, как я создавал свой вызов EF.Вызов EF для «записей» в конечном итоге не создавал предложение WHERE в запросе sql;он получал всю таблицу каждый раз, а затем методы linq отключали эту уже перечисленную массу данных - это происходило каждый раз, когда печаталось письмо, - вызывая замедление.Doh!Я переместил метод .Where на уровень хранилища данных, где он перечисляет после того, как где фильтрует результаты, и возвращает словарь - похоже, теперь отлично работает.Спасибо за вашу помощь!Я отметил самый полезный ответ, который помог мне разобраться в проблеме.
Что касается решения Flickr / передачи всего набора данных клиенту, я все еще чувствую, что это странно / излишне, но я уверен,это гарантировано определенными большими наборами данных.Также буду больше изучать OutputCache для других вещей.
Еще раз спасибо!