setTimeout/clearTimeout 是否耗费资源?

14

我有类似以下的内容:

var myTimeout;
function delayStuffUntil( when ){ 
  if( myTimeout) clearTimeout( myTimeout );
  myTimeout = setTimeout( stuff, when - Date.now() );
}

delayStuffUntil会被调用多次,并且很可能会连续几次使用相同的when值。

我是否应该检查当前的when与上一次的值是否相同,然后仅在不同的情况下更改定时器,因为setTimeout/clearTimeout是否足够昂贵?

我考虑过这个问题,但事实上比较when有点麻烦,而且我认为过早地优化是万恶之源,所以我可能没必要费力气。


1
我对setTimeoutclearTimeout没有基准,但是考虑到它们在每个JS动画框架中都是多么低级,我倾向于说“不”。 - zzzzBov
1
setTimeout(computeHugeFractal, 10); <-- 很耗费资源! setTimeout(function() { }, 10); <--- 很便宜。 - Ed S.
2个回答

9

setTimeoutclearTimeout本身并不昂贵。

真正需要担心的是函数 "stuff"。

如果 "stuff" 运行时间太长,那么如果调用得太频繁,它可能会阻塞用户界面。


无论如何,“stuff”将被调用相同的次数。谢谢! - rampion

2

我刚刚发现在Chrome浏览器上,我在鼠标移动时调用clearTimeout和setTimeout存在性能问题。这个操作比人们想象的要费时更多,但我不知道为什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接