2016-07-03 36 views
1

我有這樣的例子,使用for循環和使用setInerval比較簡單的計數器環的表現,exeuction時間差巨大如下:Javascript setInterval執行時間少於1毫秒?

var i = 0; 
var i2 = 0; 
var int1 = null; 

console.time("for loop"); 
do{ 
    i++; 
}while(i <= 1000); 
console.timeEnd("for loop"); 


function fnc(){ 
    if(i2++ == 1000){ 
    clearInterval(int1); 
    console.timeEnd("interval loop"); 
    } 
} 

console.time("interval loop"); 
int1 = setInterval(fnc , 1); 

輸出

enter image description here

看演示在:http://jsbin.com/jusiqilayi/edit?js,output

我想知道是否有可能執行一個函數我們時間間隔小於1ms的setInterval?或者是否有一種方法可以使用setInterval爲給定示例實現更好的性能?

+0

我一直在看你的問題現在超過5分鐘,我只是不明白爲什麼有人想在這個例子中使用'setInterval'方法?或者我只是不明白這個問題?! –

+0

問題是關於setInerval性能的底線,是否可以像增加一個變量那樣簡單的1個指令代碼獲得更好的執行時間?希望現在更清楚。 –

+0

由於@Ismail在最小延遲時間爲4ms以下回答(您可以嘗試加倍您的條件值以查看效果),使用間隔的整點也是在每次調用之前創建一個延遲,從邏輯上無延遲地使用它不會使感。 –

回答

3

setIntervalsetTimeout被迫使用至少最小延遲。最小延遲DOM_MIN_TIMEOUT_VALUE爲4毫秒,由HTML5 spec指定,並且在2010年及以後發佈的瀏覽器中保持一致。

在現代瀏覽器中,您可以使用window.postMessage()作爲變通方法,以實現0ms超時爲described here

+0

感謝您的澄清,你知道是否有可能突破4ms延遲限制嗎? –

+0

不幸的是,你不能(據我所知)。試試'window.postMessage()'解決方法。 –

+0

謝謝@Ismail。 –