我正在编写一个WebGL游戏,我很好奇如果通过检查是否应该在requestAnimationFrame
的每次更新时发生我的游戏事件来表现更好的性能(使用{ {1}})或设置超时(使用Date.now()
)。
请注意,事件通常相隔约100毫秒。
我主要担心的是setTimeout()
在闲置时不会浪费CPU(等待下一个事件),如果我在每次更新时都进行检查,那么就会进行计算,如果我使用的话就不会发生的setTimeout
答案 0 :(得分:1)
我认为正确的做法是使用requestAnimationFrame。
如果您已经在requestAnimationFrame中,我认为检查当前时间和任何待处理事件是一个更好的主意,并且基本上可以做任何可以做的工作。
setTimeout
需要一些非常类似于上下文切换的东西,这是不必要的费用,当然,如果事件导致更新屏幕,你要么必须“立即”进行更新,要么安排要在下一个requestAnimationFrame中执行此操作,这两者都是不必要的复杂性。
答案 1 :(得分:1)
如果您需要活动,请创建Events并使用eventListeners。
如果你需要在每次调用rAF时检查条件已经改变以执行某些操作,只需在rAF循环中进行检查。
注意:您不需要,应避免在每次通话时创建新的日期对象;有一个TimeStamp通过rAF作为所请求函数的唯一参数传递,使用它。
function update(timestamp){...};
requestAnimationFrame(update);
以高速率使用setTimeout只会对timedout函数进行无用的调用,该函数将被推送到要执行的任务堆栈之上。
将检查嵌入rAF循环的顶部同样好。