javascript - setInterval 会导致浏览器挂起吗?

标签 javascript settimeout setinterval

几年前,有人警告我不要长时间使用 setInterval,因为如果被调用的函数运行时间超过指定的时间间隔,它可能会导致浏览器挂起,然后就不会再运行了能够 catch :

setInterval( function(){
  foo = 'bar_' + i++;
}, 1 );

现在,我知道在循环中添加大量代码可能会导致浏览器挂起无论如何,并且阻止代码如alertprompt 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/

相关文章:

javascript - 如何监听用户在 Google Maps v3 中绘制多边形的开始?

javascript - 如何防止自动点击赞成票/反对票按钮的垃圾邮件?

javascript - 在 setInterval 中为匿名函数提供多个参数

javascript - 如何在 jQuery 中调用 setinterval?

javascript - 如何在浏览器不询问我是否要重新发送的情况下刷新网页

javascript - 未捕获的类型错误 : Cannot assign to read only property

javascript - Greasemonkey setTimeout 和 setInterval 不触发

javascript - 以下 queueMicrotask polyfill 如何回退到使用 setTimeout?

javascript - 在 Hangman TypeScript 游戏结束时一次显示一个下划线

jquery - 倒计时结束时显示我的分数