多个特定用途的设置间隔或单个超级间隔

时间:2013-09-21 15:25:28

标签: javascript performance

对于代码练习和改进目的,我正在编写一个简单的游戏(目前将其编写为通用游戏引擎)。

我目前正在运行多个setInterval个调用,即每个“实体”(预制/播放器)查看按下的键,检查冲突,更新位置引用等。我只是想知道什么样的性能问题(如果有的话)可能来自大量单独的setIntervals。它们相对于彼此的时间并不重要,所以我并不担心它们不同步(它们的间隔略有不同),但是会有一个setInterval遍历所有实体来运行所有检查实际上更有效率?我唯一担心的是,该功能可能需要比间隔时间更长的时间。创建新的区间是否会产生足够的压力,让每个区域都有相当少的压力?

1 个答案:

答案 0 :(得分:3)

首先,我不会使用setInterval,因为如果回调中的代码执行的时间比间隔长,则回调可能会堆叠并一个接一个地发生。

至于拥有多个计时器,我认为这不是一个好主意,即使你不关心同步。如果你想调节你的游戏速度,它会让整体事情变得太复杂而无法维持并成为一场噩梦。我肯定会选择一个计时器。

此外,如果你不清楚,那么requestAnimationFrame功能已针对执行动画进行了优化,因此您可以使用该功能代替setTimeout。如果浏览器可以跟上,它基本上会以60fps调用。

您可以使用传递给timestamp的回调函数的requestAnimationFrame作为参数来确定自上次游戏循环迭代以来经过的时间。