是否应始终将 requestAnimationFrame 调用限制在 60 FPS?

Yem*_*lat 5 javascript canvas requestanimationframe

requestAnimationFrame每当屏幕准备好重绘时调用。在现代屏幕上,刷新率可能比每秒 60 帧高很多。如果在这些调用中发生了很多事情 - 它可能会影响应用程序的整体性能。

所以我的问题是:应该requestAnimationFrame总是被限制到 60FPS 吗?人眼真的能分辨出 16ms 和 8ms 重绘延迟之间的区别吗?

[更新] 为了在高刷新率的屏幕上获得更高的性能,我最终将其限制为 60FPS。并且会向在 rAF 呼叫中有很多事情要做的每个人建议这种方法。当然,您应该自己进行测试。

kly*_*lyd 7

根据MDN,它不一定总是 60 FPS。

相关报价:

这将要求在浏览器执行下一次重绘之前调用您的动画函数。回调的次数通常为每秒 60 次,但通常与 W3C 推荐的大多数 Web 浏览器中的显示刷新率相匹配。在后台选项卡中运行时,回调速率可能会降低到较低的速率。

至于人眼能否区分 60 和 120 FPS,嗯,这是一个开放且自以为是的问题。有些人声称看到它,其他人声称这是不可能的。允许最终用户进行选择(或者只是充分利用他们的硬件)可能是最好的。

正如markE的评论指出的那样。该requestAnimationFrame回调接收到DOMHighResTimeStamp这是一种高精度计时器精确到“千分之一毫秒,到任何所需的值”通过使用此时间戳,并计算delta帧之间,你可以调整你的刷新率。

参考:

注意:请记住留下评论以解决任何downvotes,否则它们不是有用的反馈。

  • +1 一个很好的答案。请注意……浏览器现在将时间戳参数发送到 RAF。这意味着您可以计算自上次执行 RAF 循环以来经过的时间。这使您可以将 RAF 节流到所需的时间间隔 ;-) (3认同)