2009-12-29 13 views
11

Come funzioni di callback maniglia setInterval che richiedono più tempo di quanto l'intervallo desiderato?setInterval e lunga esecuzione funzioni

Ho letto che il callback può ricevere il numero di millisecondi in ritardo come primo argomento, ma non sono riuscito a trovare il motivo per cui sarebbe tardi (jitter o funzioni di lunga durata).

E il meraviglioso follow-up, ci si comporta in modo diverso per i browser più comuni?

+0

Bella domanda. Sospetto che la risposta sia specifica per il browser. Dovremmo eseguire alcuni test per scoprirlo? –

+0

Non mi baserei su ricevere argomenti per la richiamata. Invece, utilizzare un semplice confronto data. Sembra l'approccio più affidabile e cross-browser per me. –

risposta

14

Permettetemi di citare un ottimo article su timer da John Resig:

setTimeout(function(){ 
    /* Some long block of code... */ 
    setTimeout(arguments.callee, 10); 
}, 10); 

setInterval(function(){ 
    /* Some long block of code... */ 
}, 10); 

Questi due pezzi di codice possono apparire essere funzionalmente equivalente, in un primo momento vista, ma non lo sono. In particolare il codice setTimeout avrà sempre ad almeno un ritardo 10ms dopo la precedente esecuzione callback (si può finire essere più, ma non meno) che setInterval tenterà di eseguire un callback ogni 10ms indipendentemente da quando è stata eseguita l'ultima callback .

intervalli possono eseguire back-to-back senza alcun ritardo se prendono abbastanza a lungo da eseguire (più lungo del ritardo specificato).

+4

Quindi, in poche parole, perché threading JavaScript è tutto a thread singolo, i callback non possono essere eseguiti in parallelo. Perfezionare. –

Problemi correlati