几年前,有人警告我不要长时间使用 setInterval
,因为如果被调用的函数运行时间超过指定的时间间隔,它可能会导致浏览器挂起,然后就不会再运行了能够 catch :
setInterval( function(){
foo = 'bar_' + i++;
}, 1 );
现在,我知道在循环中添加大量代码可能会导致浏览器挂起无论如何,并且阻止代码如alert
、prompt
和 confirm
将停止其轨道中的代码,但是有什么好的理由避免 setInterval
吗?
注意:我知道如何进行递归 setTimeout
调用(因为这就是我一直在使用的),这个问题是我试图弄清楚它是否仍然值得使用它们,或者是否setInterval
可以安全使用。
最佳答案
setInterval
不好的原因是它会尝试在每个 X MS 时执行代码,而不管线程中发生了什么。所以如果你有:
setInterval( complexFunction, 1 ); // complexFunction takes >1 MS to complete
...您可能会以 setInterval
结束,甚至在它自己的代码完成之前尝试重新执行几次!但是,您可以类似地使用 setTimeout
来避免这个问题:
setTimeout( complexFunction, 1 );
function complexFunction() {
// complex code
setTimeout( complexFunction, 1 );
}
...现在 complexFunction
只会在自己的代码完成后再次调用自己,所以如果它自己的代码需要超过 1 毫秒的时间才能完成,你将不会有任何待办事项需要处理你会用 setInterval
关于javascript - setInterval 会导致浏览器挂起吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5479762/