Javascript setTimeout性能与手动检查

Javascript setTimeout performance vs manual check

本文关键字:检查 setTimeout 性能 Javascript      更新时间:2023-09-26

我正在编写一个WebGL游戏,我很好奇通过检查是否应该在每次更新requestAnimationFrame时(使用Date.now())或通过设置超时(使用setTimeout())来实现我的游戏事件,在性能方面是否会更好。

请注意,这些事件通常间隔约100毫秒。

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

如果需要事件,请创建事件并使用eventListeners。

如果您需要在每次调用rAF时检查某个条件是否已更改以执行某些操作,只需在rAF循环中进行检查即可。

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

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

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

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

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


如果您已经处于requestAnimationFrame中,我认为最好检查当前时间和任何挂起的事件,并尽可能地进行任何工作。

setTimeout需要一个非常像上下文切换的东西,这是一个不必要的开销,当然,如果事件导致更新屏幕,你要么必须"现在"进行更新,要么安排在下一个requestAnimationFrame中进行更新,这两种都是不必要的复杂性。