n = 0;
var timer = setInterval(function() {
if (n == 0) {
console.log(new Date());
}
// execute some other code here
n++;
if (n == 1000) {
clearInterval(timer);
console.log(new Date());
}
}, 1);
此代码在大约3-4秒内执行,具体取决于机器和浏览器.如何让它在1秒内完成?
浏览器中的Javascript计时器不准确(对于该用法,C会更好).
但是,在延迟尽可能高的情况下,您可以获得更好的平均精度,尤其是避免低值,例如1 ms.
在一秒钟内对一个函数进行1000次均匀定时调用将很困难.一毫秒是一个低值,触发函数本身的简单执行(加上处理定时器的开销)可能需要一个接近1毫秒(或更多)的时间......这意味着JS解释器在1ms后调用该函数,执行代码然后设置一个新的1ms计时器.因此,呼叫之间的间隔超过1毫秒.
JS解释器做了类似的事情
At t call function <-- this takes execute function <-- some at t+x set new 1ms timer <-- time etc...
但是,如果您能够在接近1秒的时间范围内(比现在的3-4秒)结束该过程,尽可能多地进行 1毫秒的呼叫,这是可能的.
var n = 0; var timer= setInterval(function(){ if(n++ == 0) { console.log(new Date()); } }, 1); setTimeout(function() { clearInterval(timer); console.log("Got n="+n+" at "+(new Date())); }, 1000);
这与你的程序基本相同
n
每1ms递增一次
但是,该过程的结束由另一个1秒计时器控制
在Chrome中,我得到252
n个增量,两个日期相差约1秒.