Javascript setTimeout性能与手动检查

时间:2016-01-06 05:33:46

标签: javascript performance webgl settimeout

我正在编写一个WebGL游戏,我很好奇如果通过检查是否应该在requestAnimationFrame的每次更新时发生我的游戏事件来表现更好的性能(使用{ {1}})或设置超时(使用Date.now())。

请注意,事件通常相隔约100毫秒。

我主要担心的是setTimeout()在闲置时不会浪费CPU(等待下一个事件),如果我在每次更新时都进行检查,那么就会进行计算,如果我使用的话就不会发生的setTimeout

2 个答案:

答案 0 :(得分:1)

我认为正确的做法是使用requestAnimationFrame

如果您已经在requestAnimationFrame中,我认为检查当前时间和任何待处理事件是一个更好的主意,并且基本上可以做任何可以做的工作。

setTimeout需要一些非常类似于上下文切换的东西,这是不必要的费用,当然,如果事件导致更新屏幕,你要么必须“立即”进行更新,要么安排要在下一个requestAnimationFrame中执行此操作,这两者都是不必要的复杂性。

答案 1 :(得分:1)

如果您需要活动,请创建Events并使用eventListeners。

如果你需要在每次调用rAF时检查条件已经改变以执行某些操作,只需在rAF循环中进行检查。

注意:您不需要,应避免在每次通话时创建新的日期对象;有一个TimeStamp通过rAF作为所请求函数的唯一参数传递,使用它。

function update(timestamp){...};   
requestAnimationFrame(update);

以高速率使用setTimeout只会对timedout函数进行无用的调用,该函数将被推送到要执行的任务堆栈之上。

将检查嵌入rAF循环的顶部同样好。