几年前,我被警告不要使用setInterval
很长一段时间,因为如果被调用的函数运行时间超过指定的时间间隔,可能会导致浏览器挂起,然后无法跟上:
setInterval( function(){
foo = 'bar_' + i++;
}, 1 );
现在,我知道在循环中添加大量代码可能会导致浏览器挂起anyway,以及像这样的阻塞代码alert
, prompt
, and 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 );
}
...now complexFunction
只有在其自己的代码完成后才会再次调用自身,因此,如果其自己的代码花费的时间超过 1 MS 才能完成,您将不会像您那样有任何待处理的积压工作setInterval
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)