zzz*_*Bov 3 javascript settimeout setinterval
几年前,我被警告不要使用setInterval很长一段时间,因为如果被叫函数的运行时间超过指定的时间间隔,它会导致浏览器挂起,然后就无法赶上:
setInterval( function(){
foo = 'bar_' + i++;
}, 1 );
Run Code Online (Sandbox Code Playgroud)
现在,我知道,在一个循环中添加大量的代码可能会导致浏览器挂起无论如何,这阻止这样的代码alert,prompt以及confirm将停止它的轨道的代码,但是有没有什么好的理由,以避免setInterval?
注意:我知道如何进行递归setTimeout调用(因为这是我一直在使用的),这个问题是我试图弄清楚它是否仍然值得使用它们,或者是否setInterval可以安全使用.
mVC*_*Chr 18
原因setInterval很糟糕是因为无论线程中发生了什么,它都会尝试每X MS执行一次代码.所以如果你有:
setInterval( complexFunction, 1 ); // complexFunction takes >1 MS to complete
Run Code Online (Sandbox Code Playgroud)
... setInterval即使自己的代码完成,你最终可能会尝试多次重新执行!但是,您可以使用setTimeout类似的方法并避免此问题:
setTimeout( complexFunction, 1 );
function complexFunction() {
// complex code
setTimeout( complexFunction, 1 );
}
Run Code Online (Sandbox Code Playgroud)
...现在complexFunction只有在自己的代码完成后才会再次调用自己,所以如果自己的代码需要超过1 MS才能完成,那么就不会有任何积压来处理setInterval
| 归档时间: |
|
| 查看次数: |
9497 次 |
| 最近记录: |