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

几年前我被警告不要长时间使用setInterval,因为如果被调用的函数运行时间超过指定的时间间隔,它会导致浏览器挂起,然后就无法赶上:

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 MS才能完成,那么就像setInterval一样,不会有任何积压处理

上一篇:javascript – 如何重置setInterval计时器?


下一篇:javascript – Node Js中每个请求之间的延迟5秒