2010-06-12 1 views
9

So che entrambi e firefox hanno i limiti per l'esecuzione di JavaScript (Source 1, Source 2). Sulla base del numero di dichiarazioni eseguite, ho sentito dire che erano 5 milioni da qualche parte in IE e in base al numero di secondi in Firefox: sono 10 secondi per impostazione predefinita per la mia versione.Tempo di esecuzione massimo per JavaScript

La cosa che non capisco è quello che i casi andrà oltre questi limiti:

  1. Sono sicuro che un ciclo gigantesco andrà oltre il limite per il tempo di esecuzione

  2. ma sarà un evento hander oltre il limite, se esso stesso è il tempo di esecuzione è sotto il limite ma se si verifica più volte?

Esempio:

Diciamo che ho un timer sulla mia pagina, che esegue alcuni javascript ogni 20 secondi. Il tempo di esecuzione per il gestore del timer è 1 secondo. Fa Firefox e cioè tratta ogni chiamata della funzione timer separatamente, quindi non supera mai il limite, o è firefox/cioè somma il tempo di ogni chiamata così dopo che il gestore termina, quindi dopo 200 secondi sul mio sito (con il timer chiamato 10 volte) si verifica un errore anche se il gestore del timer stesso è lungo solo 1 secondo?

risposta

1

Il gestore eventi è considerato un nuovo contesto di esecuzione: il limite di tempo viene reimpostato.

Se hai bisogno di fare ancora più calcoli, dai un'occhiata a WebWorkers.

+0

ok grazie per la risposta –

8

Il seguente articolo di Nicholas C. Zakas discute come e quando i vari browser interrupt lungo l'esecuzione di codice JavaScript:

Rompere codice di elaborazione lungo in piccoli pezzi e lanciarli con timer è infatti uno modo per aggirare questo problema. Il seguente post Stack Overflow suggerisce un metodo per affrontare questo:

D'altra parte, web workers sarebbe più adatto per la lavorazione lungo in esecuzione, poiché la loro esecuzione avviene in un processo separato, e pertanto non blocca thread UI:

Tuttavia lavoratori web non sono supportate in Internet Explorer ancora, e non avrebbero accesso al DOM.

0

Anch'io ho bloccato questo tipo di errore JS. Ottengo anche la soluzione, sfortunatamente solo per IE, che dice di modificare il registro (comando regedit) e di aggiornare il numero di comandi JS da consentire. Leggi di più qui http://support.microsoft.com/?kbid=175500.

Ma questa non sembra essere una buona soluzione per me bcoz se stai sviluppando un'applicazione web non puoi chiedere ad ogni utente di utilizzare solo IE e aggiornare il suo registro di sistema.

Come soluzione temporanea: se i dati da elaborare a livello client sono molto grandi, è possibile inserire alcuni ritardi manuali tra l'insieme di correzioni di eventi. Per es. Se ci sono 100 eventi di qualsiasi attività che si desidera elaborare, è possibile suddividerli in 10 set di 100 ed elaborarli in diciamo 100 ms. Per sapere come fare che seguono sotto il collegamento:

http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/

+0

Il PO non ha davvero chiedere di "soluzione" solo chiesti che cosa determina questo comportamento in ogni browser. –