jQuery Автозаполнение исходного свойства как функция () {} очень медленно - PullRequest
6 голосов
/ 13 октября 2011

У меня есть два теста, использующих достаточно большой объект json (1,2 МБ):

source: data

и

source: function (request, response) {
                response(data);
            }

В первом случае автозаполнение работает так, как я ожидал,

Во втором случае автозаполнение работает время от времени и очень медленно.Иногда браузер зависает на 3-4 секунды, «не отвечая», прежде чем он снова освобождается.

Что происходит по-другому во втором случае по сравнению с первым?

(я бы поставил некоторую фильтрациюлогика в этой функции в какой-то момент, но сейчас я тестирую вот так).

1 Ответ

5 голосов
/ 13 октября 2011

Ваш набор данных фильтруется при передаче его как локального объекта, но не фильтруется при использовании обратного вызова (это будет обязанностью программистов).

При использовании source: data автозаполнение фильтрует набор результатов для вас:

response($.ui.autocomplete.filter(array, request.term));

При использовании обратного вызова source: function(request, response) { response(data) } фильтрация не применяется, поэтому ваша страница генерирует разметку для 1,3 МБ json.

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

В этой документации по автозаполнению пользовательского интерфейса jQuery объясняется поведение и предлагаются способы реализации кэширования для удаленного вызова.

http://jqueryui.com/demos/autocomplete/#remote-with-cache

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