画布FPS人为限制在100fps?

时间:2010-09-11 00:20:29

标签: javascript html html5 canvas

在计算渲染帧数并将FPS打印到画布上的this page中,我们可以看到它以100fps达到顶峰,这至少是可疑的。这是为什么?

<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="utf-8">
  <title>Canvas FPS artificial limiting</title>
 </head>
 <body>
  <canvas id="c" width="320" height="240"></canvas>
  <script>
   var c = document.getElementById('c').getContext('2d'),
    f = 0,
    s = new Date;
   setInterval(function() {
    c.clearRect(0, 0, 320, 240);
    c.fillText(++f / ( ((+new Date) - s) / 1000 ), 8, 16);
   }, 0);
  </script>
 </body>
</html>

我目前在Firefox 4.0b6和Ubuntu 10.10 beta上遇到此问题。

1 个答案:

答案 0 :(得分:12)

我明白了!根据这个页面:

https://developer.mozilla.org/en/window.setTimeout#Minimum_delay_and_timeout_nesting

Firefox上{p} setTimeoutsetInterval被限制为至少10毫秒(每秒100次迭代),以避免锁定和UI性能下降。这意味着,低于此值的延迟值使用10ms(最多100fps)。

这不是画布问题;这是对定时器最小延迟的人为限制。

编辑:进一步阅读表明Chrome可以进行4ms的钳位,可以对定时器进行250fps的人工限制。