2016-07-03 34 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。 –