如何确定在JavaScript动画循环中使用的最佳“帧速率”(setInterval delay)?

当写一个JavaScript动画时,你当然使用setInterval(或重复的setTimeout)循环。但是在setInterval / setTimeout调用中使用的最好的延迟是什么?

jQuery API page for the .animate() function,用户“fbogner”说:

Just if anyone is interested: Animations are “rendered” using a setInterval with a time out of 13ms. This is quite fast! Chrome’s fastest possible interval is about 10ms. All other browsers “sample” at about 20-30ms.

任何想法如何jQuery确定使用这个特定的数字?

开始赏金。我希望有人知道源代码背后的Chromium或Firefox可以提供一些硬的事实,可能支持特定帧率的决定。或者动画(或框架)及其延迟的列表。我相信这是一个有趣的机会,做一点研究。

有趣的是 – 我只是花时间看看谷歌的Pac-Man源,看看他们做了什么。他们设置一个可能的FPS(90,45,30)阵列,从第一个开始,然后每个帧检查帧的“慢度”(帧超过其分配的时间)。如果慢度超过50ms 20次,则帧速率被向下移动到列表中的下一个(90→45,45→30)。看起来,帧速率从来没有升高,可能是因为游戏是如此短暂,它不值得麻烦来编码。

哦,并且setInterval delay当然设置为1000 / framerate。他们做的,事实上,使用setInterval和不重复的setTimeouts。

我认为这个动态帧速率功能是非常整齐!

我敢说,相当一部分网络用户正在使用以60Hz刷新的监视器,这意味着每16.66ms一帧。所以为了使监视器成为瓶颈,您需要产生比16.66ms更快的帧。

有两个原因,你选择一个值,如13ms。首先,浏览器需要一点时间重新绘制屏幕(在我的经验中,从不少于1ms)。这让你说,每15ms更新一次,这是一个非常有趣的数字 – Windows上的标准计时器分辨率为15ms(见John Resig’s blog post)。我怀疑一个写得很好的15ms动画看起来非常接近相同的各种浏览器/操作系统。

FWIW,fbogner是关于非Chrome浏览器触发setInterval每20-30毫秒的平淡错误。我写了一个test来测量setInterval的速度,并得到这些数字:

> Chrome – 4ms
> Firefox 3.5 – 15ms
> IE6 – 15ms
> IE8 – 15ms

http://stackoverflow.com/questions/2940054/how-to-determine-the-best-framerate-setinterval-delay-to-use-in-a-javascript

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何确定在JavaScript动画循环中使用的最佳“帧速率”(setInterval delay)?