在计算渲染帧数并将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上遇到此问题。
答案 0 :(得分:12)
我明白了!根据这个页面:
https://developer.mozilla.org/en/window.setTimeout#Minimum_delay_and_timeout_nesting
Firefox上{p}setTimeout
和setInterval
被限制为至少10毫秒(每秒100次迭代),以避免锁定和UI性能下降。这意味着,低于此值的延迟值使用10ms(最多100fps)。
这不是画布问题;这是对定时器最小延迟的人为限制。
编辑:进一步阅读表明Chrome可以进行4ms的钳位,可以对定时器进行250fps的人工限制。