目前,我正在使用requestAnimationFrame
(理想情况下)60 FPS 渲染 WebGL 内容。我还在同时安排一个“更新”进程,该进程使用setTimeout
. 我使用后者是因为我只需要每秒更新大约 30 次对象,而且它并不是绘制序列的一部分;为实际渲染通道节省剩余的 CPU 似乎是个好主意,因为我的大多数动画都是相当硬件密集型的。
我的问题是最佳实践之一。setTimeout
并且setInterval
对电池寿命和 CPU 消耗不是特别友好,尤其是当浏览器不在焦点时。另一方面,使用requestAnimationFrame
(或将更新直接绑定到现有的渲染阶段)可能会每秒强制执行比严格必要的更新更多的更新,并且可能会在浏览器不在焦点时或在浏览器认为的其他时间完全停止更新“动画”是不必要的。
更新但不呈现内容的最佳行动方案是什么?