我知道该setInterval
函数几乎是单线程的。但是如果我们将时间设置为一个非常小的值,比如 50 毫秒:
setInterval(function()
{
// do really heavy stuff
}, 50);
那么第一个生成的事件可能不会及时完成然后我猜第二个事件被放入浏览器的队列,然后是第三个,第四个等等。所以基本上这意味着浏览器的队列变得非常快,这显然不是一件好事(是吗? )
到目前为止,我已经提出了这两个解决方案:
1)等待第一个事件完成,然后调用第二个事件(通过使用超时):
var func = function()
{
setTimeout(function()
{
// do really heavy stuff and when it's finished call again
func();
}, 50)
}
2) 创建一个监控事件状态的标志:
var isIntervalInProcess = false;
setInterval(function()
{
if ( isIntervalInProcess )
return false;
isIntervalInProcess = true;
// do really heavy stuff
isIntervalInProcess = false;
}, 50);
那些消除事件重叠的最佳实践是否重叠?