Javascript 我应该使用requestanimationframe还是setTimeout?

Javascript 我应该使用requestanimationframe还是setTimeout?,javascript,canvas,Javascript,Canvas,我正在测试JavaScript应用程序的性能,这是一个使用画布的游戏。我遇到的一个问题是FPS的主要波动:从60毫秒到2毫秒 正如你所看到的,有主要的尖峰。这不是由于绘制、脚本编写、渲染或加载。我认为这是因为requestAnimationFrame没有指定一个设置的FPS速率,它可能太灵活了?我应该使用setTimeout吗?在这些情况下,它是否通常更可靠,因为它强制应用程序仅以一个设置的FPS速率运行?性能始终取决于具体情况。没有关于应用程序的更多信息(例如呈现应用程序的特定代码)。很难说

我正在测试JavaScript应用程序的性能,这是一个使用画布的游戏。我遇到的一个问题是FPS的主要波动:从60毫秒到2毫秒


正如你所看到的,有主要的尖峰。这不是由于绘制、脚本编写、渲染或加载。我认为这是因为requestAnimationFrame没有指定一个设置的FPS速率,它可能太灵活了?我应该使用setTimeout吗?在这些情况下,它是否通常更可靠,因为它强制应用程序仅以一个设置的FPS速率运行?

性能始终取决于具体情况。没有关于应用程序的更多信息(例如呈现应用程序的特定代码)。很难说应该如何构造代码

通常,应始终使用requestAnimationFrame。特别是用于渲染

(可选)存储增量时间并将动画属性乘以该增量。这将在帧速率不一致时创建平滑动画

我还发现随机帧速率变化通常与垃圾收集有关。也许可以进行一些内存分析,以确定是否存在可以避免在每个帧中重新创建对象的位置

requestAnimationFrame
几乎在所有方面都优于
setTimeout
。它不会作为后台选项卡运行。它节省了电池。它为浏览器提供了有关您正在开发的应用程序类型的更多信息,这使给定的浏览器能够做出许多安全的性能提升假设


我强烈建议您观看本次演讲。

您在英国皇家空军的回调中做什么工作?