Qual è il valore minimo in millisecondi di setTimeout?

Mi piacerebbe mettere

var minValue = 0; if ( typeof callback == 'function' ) { setTimeout( callback, minValue ); } 

questo codice quando implemento la funzione di callback con JavaScript.

Ma ho trovato che i browser moderni e alcuni vecchi browser

avere un valore di timeout minimo diverso.

So che Zero non può essere un valore minimo.

Quale sarebbe il valore minimo di setTimeout per

browser moderni e alcuni vecchi browser per problemi di compatibilità?

Penso che 10 sarà il minimo più affidabile in tutti i browser, dal momento che ho visto molti codici che lo utilizzano.

Tuttavia, 4 ms è il minimo per HTML5

In realtà, 4 ms è specificato dalle specifiche HTML5 ed è coerente tra i browser rilasciati nel 2010 e successivi. Prima (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2), il valore di timeout minimo per i timeout nidificati era 10 ms.

Il minimo è 4ms (come HTML5) nel browser moderno, prima era 10ms. Si noti che questi tempi non sono mai accurati al 100%.

Questo articolo verifica Firefox, Safari e Opera e traccia grafici delle prestazioni:

http://ejohn.org/blog/analyzing-timer-performance/

Firefox 2, Opera e Safari hanno tutti una finestra inferiore di 10 ms per i ritardi

Per i browser più vecchi, puoi fare un test come quello in quell’articolo. Ho appena eseguito un test che avevo da un po ‘di setInterval utilizzando un intervallo di 10 ms in IE6 e ho ottenuto una media di 55 ms . setTimeout sembra essere inferiore a 35ms .

Ho eseguito il test in Chromium e ottenuto una media di ~ 11 ms per un timeout di 10 ms. L’ho provato con intervalli di 4ms e 1ms e ho ottenuto ~ 4,5ms per entrambi. Inoltre, tieni presente che i numeri possono variare a seconda dei sistemi operativi.

Se sei interessato, ecco il codice di prova:

  

setTimeout probabilmente chiama la chiamata di sistema Sleep o Sleep .

La meccanica attuale, inclusa la quantità minima di millisecondi, di setTimeout è proprietaria e / o dipendente dal sistema, poiché non si trovano nelle specifiche ECMA ufficiali. Dipende dal tuo tempo di esecuzione di Javascript, così come dal sistema su cui lo stai eseguendo. Dato che il tuo run-time Javascript non aggiunge un sacco di overhead, la quantità minima di millisecondi è determinata dalla risoluzione timeslice del tuo sistema operativo e hardware. La più piccola quantità di tempo “sleepable” di solito è il tempo necessario affinché il processo venga allocato da un altro timeslice dall’algoritmo di pianificazione del sistema.

Ad esempio, su Windows (post XP), la documentazione per la chiamata del sistema sleep rivela:

Un valore pari a zero fa sì che il thread rinunci al resto della sua porzione di tempo in qualsiasi altro thread che è pronto per essere eseguito. Se non ci sono altri thread pronti per essere eseguiti, la funzione ritorna immediatamente e il thread continua l’esecuzione.

Ciò significa che, in alcune condizioni estremamente rare, in cui non vi è altro processo attualmente in attesa sul thread hardware su cui è in esecuzione il processo di runtime Javascript, potrebbe continuare immediatamente, a seconda di come viene implementato il runtime di JavaScript. Probabilmente non osserverai tale condizione molto spesso però 🙂