Javascript 如果这些回调中有很多东西在进行,那么下一个动画帧必然会被延迟。“动画帧”与屏幕刷新率无关!谢谢你的评论!你有任何参考资料吗?没有,事实上我可能是不正确的(参见引用klyd的答案)。浏览器是智能的,并尝试将帧速率(js动画帧回调+回流+重画)与屏幕刷新同步,

Javascript 如果这些回调中有很多东西在进行,那么下一个动画帧必然会被延迟。“动画帧”与屏幕刷新率无关!谢谢你的评论!你有任何参考资料吗?没有,事实上我可能是不正确的(参见引用klyd的答案)。浏览器是智能的,并尝试将帧速率(js动画帧回调+回流+重画)与屏幕刷新同步,,javascript,canvas,requestanimationframe,Javascript,Canvas,Requestanimationframe,如果这些回调中有很多东西在进行,那么下一个动画帧必然会被延迟。“动画帧”与屏幕刷新率无关!谢谢你的评论!你有任何参考资料吗?没有,事实上我可能是不正确的(参见引用klyd的答案)。浏览器是智能的,并尝试将帧速率(js动画帧回调+回流+重画)与屏幕刷新同步,以获得流畅的体验。然而,当每帧有(太)多js工作、电池电量不足、标签未显示等情况时,它会自动对其进行节流。只是为了避免出现误导性评论:没有自动节流这样的事情。而且没有像帧速率同步这样的事情。这很可悲,但这里没有魔法。没有理由手动执行此操作。如果


如果这些回调中有很多东西在进行,那么下一个动画帧必然会被延迟。“动画帧”与屏幕刷新率无关!谢谢你的评论!你有任何参考资料吗?没有,事实上我可能是不正确的(参见引用klyd的答案)。浏览器是智能的,并尝试将帧速率(js动画帧回调+回流+重画)与屏幕刷新同步,以获得流畅的体验。然而,当每帧有(太)多js工作、电池电量不足、标签未显示等情况时,它会自动对其进行节流。只是为了避免出现误导性评论:没有自动节流这样的事情。而且没有像帧速率同步这样的事情。这很可悲,但这里没有魔法。没有理由手动执行此操作。如果浏览器(谁是权威的!)认为它需要节能或让CPU冷却,它会自动调节帧速率。真的吗?我确实理解:“使用这个API应该会让浏览器更恰当地利用CPU。”就像这样。是的,rAF更“合适”,因为你的绘图与显示同步。使用setInterval,您可能会徒劳地画图或错过一帧。但只要在120Hz+的显示器上试一试,你就会发现即使电脑是移动的并且电池电量不足,风扇也会发疯。事实上,正是我自己的(120Hz)电脑的风扇噪音/电池寿命让我意识到了这个问题,我在卖掉它之前不会猜到这是一个如此资源紧张的问题。
var minFrame = 13;
var maxFrame = 19;
var typicalFrame = 16;

var gameTime = 0;

var lastDrawTime = -1;

animate(drawTime) {
   requestAnimationFrame(animate);
   var dt = drawTime - lastDrawTime;
   lastDrawTime = drawTime ;
   if (dt<minFrame) return;
   if (dt>maxFrame) dt=typicalFrame; // in case of a tab-out
   gameTime+=dt;
   // ...
}

function lauchAnimation() {
    requestAnimationFrame ( function(t) { lastDrawTime = t;
                                          requestAnimationFrame(animate);  } );        
}