如何异步无限次执行函数的最快方法?
我想到了两种方法。
使用间隔
setInterval(function(){
// do stuff
})
Using while
setTimeout(function(){
while(true) {
// do stuff
}
})
我应该如何处理才能获得尽可能快的结果? 我不关心启动循环所需的时间,只关心执行循环所需的时间。
如何异步无限次执行函数的最快方法?
我想到了两种方法。
使用间隔
setInterval(function(){
// do stuff
})
Using while
setTimeout(function(){
while(true) {
// do stuff
}
})
我应该如何处理才能获得尽可能快的结果? 我不关心启动循环所需的时间,只关心执行循环所需的时间。
function foo(){
// do stuff
setTimeout( foo, 0 );
}
foo();
setInterval
有可能在函数执行时间超过间隔时间时,会排队等待执行,这可能会导致数百或数千个函数调用被阻塞。除了第一次调用外,你的while循环不是异步的。
while
的那个,我打错了“first”。 - undefinedsetTimeout(function fn () {
setTimeout(fn, 0); // loop is implicit with scheduling next timeout
code();
}, 0);
现在相当于:
setInterval(function () { code() }, 0);
1 虽然在过去可能有所不同,但现在已经不重要了 - 两种方法在调用回调函数和安排下一个事件的速度上都有相同的下限,即在Windows桌面浏览器上至少为4-5毫秒。
由于这是一个固定的下限,通常值得每个回调函数处理多个项目(比如说“做20毫秒的工作”),这样超时/延迟本身就不会占据整体时间的主导地位。还可以运行多个“并行”超时来增加共享回调执行的有效速率;然而,这些事件不能保证分布均匀。
现代浏览器也不受“setTimeout堆叠”影响;因此,为了尽快运行回调函数,任何一种方法都可以。
因此,请使用最能代表问题的方法。
requestAnimationFrame
? - undefinedsetTimeout( thisFn )
调用。 - user578895setInterval
或setTimeout
的第二个参数是不正确的。 - user663031