2012-05-23 14 views
6

Ho un elenco con 150 righe e per ogni riga ci sono tre elementi selezionati dalla selezione.Script non risponde - è possibile evitarlo?

Poiché è necessario eseguire un'elaborazione pesante prima di visualizzare ogni risultato, viene visualizzato un messaggio di errore "È possibile che uno script su questa pagina sia occupato o potrebbe non rispondere. È possibile interrompere lo script ora oppure continuare a vedere se lo script verrà completato. " e si riferisce al file jquery.js.

È possibile evitare questo errore eseguendo un lavoro jQuery?

Grazie.

+1

non può davvero dirlo senza che tu ci mostri alcun frammento: S –

+0

http://stackoverflow.com/questions/1917380/how-to-avoid-the-unresponsive-script-popup-in-firefox-with-long -running-javascri – Dev

risposta

6

È necessario suddividere l'elaborazione in più parti e dare al browser un po 'di tempo per fare roba oltre a esse utilizzando un setTimeout di 0 o 1 msec.

Un metodo molto semplice sarebbe utilizzando il metodo della biblioteca asyncforEachSeries:

async.forEachSeries(yourData, function(item, cb) { 
    // process item 
    async.nextTick(cb); 
}); 

yourData potrebbe essere oggetto jQuery contenente le righe, quindi item sarà l'elemento DOM di una riga.

+0

è '0 o 1 msec setTimeout' abbastanza? – undefined

+0

sì, perché le attività che sono in attesa verranno eseguite al momento in cui lo script si interrompe. JavaScript è a thread singolo in modo che l'esecuzione non inizi effettivamente prima del completamento del codice appena avviato. Quindi la durata non ha molta importanza – koenpeters

+0

Quindi ho bisogno di aggiungere questo timeout nel JS, non nel PHP, giusto? – Psyche

0

Non so jQuery (se c'è un wrapper disponibile in jQuery), ma in JS vanilla c'è il concetto di WebWorkers (il supporto è piuttosto buono tranne IE - vedere here).

Qui si avvia un thread aggiuntivo per i calcoli, che non blocca il thread dell'interfaccia utente. Quando i calcoli sono terminati e viene lasciato solo il risultato, si inviano i dati dal lavoratore al thread dell'interfaccia utente e si visualizzano solo i risultati.

Per dettagli, dare un'occhiata allo MDN tutorial.

0

performance del sito web guru Steve Souders ha scritto su questo problema e come risolverlo nel suo libro "Anche i siti web più veloci". Descrive una soluzione in cui si utilizzano i timeout per consentire ad altri processi di ottenere un po 'di tempo.

Here's la parte del libro che si occupa di questo problema.