2011-10-13 22 views
6

Ho due casi di test utilizzando un oggetto abbastanza grande json (1.2mb):jQuery completamento automatico proprietà source come funzione() {} è molto lento

source: data 

e

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

Nella prima caso il completamento automatico funzioni come mi aspetterei.

Nel secondo caso, il completamento automatico funziona occasionalmente ed è molto lento. A volte il browser si blocca per 3-4 secondi "non risponde" prima che si liberi di nuovo.

Cosa succede diversamente nel secondo caso rispetto al primo?

(In alcuni casi eseguirò qualche logica di filtraggio in questa funzione, ma per ora sto testando in questo modo).

risposta

5

Il set di dati viene filtrato quando lo si passa come oggetto locale, ma non viene filtrato quando si utilizza il callback (sarebbe responsabilità dei programmatori).

Quando si utilizza source: data completamento automatico filtra il set di risultati per voi:

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

Quando si utilizza il callback source: function(request, response) { response(data) } nessun filtro viene applicato, in tal modo la pagina sta generando markup per 1.3MB di JSON.

Quando esegue il completamento automatico carica i dati da un'origine locale, memorizza i dati nella cache. Quando viene recuperato in remoto, non viene memorizzato nella cache per impostazione predefinita.

Questa documentazione di completamento automatico dell'interfaccia utente di jQuery spiega il comportamento e suggerisce come implementare la memorizzazione nella cache per una chiamata remota.

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

+0

Stai suggerendo che l'utilizzo di un callback è trattata come una fonte di dati a distanza? –

+0

Mi spiace, ho frainteso la tua domanda. Inserisco un aggiornamento che ritengo sia la risposta corretta. –

+0

Grazie Jeremy. Questo risponde alla mia domanda in modo eccellente. –

Problemi correlati