2011-10-13 14 views
6

mam dwóch testów przy użyciu stosunkowo dużych obiektów json (1,2 MB):jQuery autouzupełnianie właściwości source jako funkcja() {} jest bardzo powolny

source: data 

i

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

W pierwszej przypadku autouzupełnianie działa tak, jak oczekuję.

W drugim przypadku autouzupełnianie działa sporadycznie i działa bardzo wolno. Czasami przeglądarka zawiesza się na 3-4 sekundy "nie odpowiada", zanim ponownie się zwróci.

Co dzieje się inaczej w drugim przypadku w porównaniu z pierwszym?

(W pewnym momencie będę wprowadzał pewną logikę filtrowania w tej funkcji, ale na razie testuję w ten sposób).

Odpowiedz

5

Twój zestaw danych jest filtrowany podczas przekazywania go jako obiekt lokalny, ale nie jest filtrowany podczas korzystania z oddzwonienia (będzie to odpowiedzialność programisty).

Podczas korzystania source: data autouzupełniania filtruje zestaw wyników dla Ciebie:

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

Przy użyciu zwrotnego source: function(request, response) { response(data) } filtrowanie nie jest stosowana, więc Twoja strona generuje znaczników dla 1.3MB JSON.

Gdy autouzupełnianie ładuje dane z lokalnego źródła, buforuje dane. Kiedy jest pobierany zdalnie, domyślnie nie jest buforowany.

Ta autorska dokumentacja jQuery UI wyjaśnia zachowanie i sugeruje, jak zaimplementować buforowanie dla połączenia zdalnego.

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

+0

Sugerujesz, że za pomocą wywołania zwrotnego jest traktowana jako zdalnego źródła danych? –

+0

Przepraszam, źle zrozumiałem twoje pytanie. Zamieszczam aktualizację, która według mnie jest poprawną odpowiedzią. –

+0

Dzięki Jeremy. To doskonale odpowiada na moje pytanie. –