注意:此测试占用大量CPU。
requestAnimationframeIE 9-和Opera 12-不支持。
该测试记录
setInterval并
requestAnimationframe在不同的浏览器中运行所需的实际时间,并以分发的形式为您提供结果。您可以更改毫秒数,
setInterval以查看其在不同设置下的运行方式。延迟方面的
setTimeout工作与a类似
setInterval。
requestAnimationframe通常默认设置为60fps,具体取决于浏览器。要查看切换到其他选项卡或不活动窗口时发生的情况,只需打开页面,切换到其他选项卡,然后等待一段时间。它将继续在不活动的选项卡中记录这些功能的实际时间。
测试
测试它的另一种方法是使用
setInterval和反复记录时间戳,并
requestAnimationframe在独立的控制台中查看它。当您使选项卡或窗口处于非活动状态时,您可以查看更新的频率(或者是否曾经更新)。
结果
*当该标签页处于非活动状态时, *Chrome浏览
器将最小间隔限制为
setInterval1000毫秒左右。如果间隔大于1000ms,它将以指定的间隔运行。窗口是否聚焦不重要,仅当您切换到其他选项卡时,间隔才会受到限制。
requestAnimationframe选项卡处于非活动状态时暂停。
// Provides control over the minimum timer interval for background tabs.const double kBackgroundTabTimerInterval = 1.0;
Firefox
与Chrome相似,
setInterval当选项卡(而非窗口)处于非活动状态时,Firefox将最小间隔限制为1000毫秒左右。但是,
requestAnimationframe当选项卡处于非活动状态时,运行速度将呈指数级降低,每个帧占用1s,2s,4s,8s等。
// The default shortest interval/timeout we permit#define DEFAULT_MIN_TIMEOUT_VALUE 4 // 4ms#define DEFAULT_MIN_BACKGROUND_TIMEOUT_VALUE 1000 // 1000ms
Internet Explorer
IE不会限制
setInterval选项卡处于非活动状态时的延迟,但会
requestAnimationframe在非活动选项卡中暂停。窗口是否未聚焦都没有关系。
Edge
从边缘14开始,
setInterval在不活动的选项卡中,上限为1000ms。
requestAnimationframe总是在非活动标签中暂停。
Safari
与Chrome浏览器一样,
setInterval当该标签页处于非活动状态时,Safari的上限为1000毫秒。
requestAnimationframe也暂停了。
Opera
自从采用Webkit引擎以来,Opera表现出与Chrome相同的行为。
setInterval上限为1000毫秒,
requestAnimationframe当该标签页处于非活动状态时会暂停。
摘要
非活动标签的重复间隔:
setInterval requestAnimationframeChrome9- not affected not supported10 not affected paused11+ >=1000ms pausedFirefox3- not affected not supported4 not affected 1s5+ >=1000ms 2ns (n = number of frames since inactivity)IE9- not affected not supported10+ not affected pausedEdge13- not affected paused14+ >=1000ms pausedSafari5- not affected not supported6 not affected paused7+ >=1000ms pausedOpera12- not affected not supported15+ >=1000ms paused



