翻译:setInterval与requestAnimationFrame的时候距离测试

因为原测试发生在13年,所以近日(14年3月31日),依据浏览器实测情况调整了文后的表格。

原文来自stackoverflow题目:浏览器在标签页/窗口闲置的时刻,浏览器停息js吗?。采用的回复中有两个测试,特地测试了requestAnimationFramesetInterval在各个场景下的时候距离,测试历程和效果都值得相识。

<翻译>

测试一

我写了一个测试《帧率散布:setInterval VS requestAnimationFrame》。

《翻译:setInterval与requestAnimationFrame的时候距离测试》

注重:测试效果跟CPU有很大关联。同时,requestAnimationFrame在桌面端IE10+上才最先支撑,同时Opera不支撑requestAnimationFrame(译注:原文的兼容性相关内容已过期,这里运用canIuse的结论。)

这个测试纪录下了setIntervalrequestAnimationFrame在差别浏览器下运转的真正耗时,同时展现他们的数据散布。你能够转变setInterval的毫秒值来看看差别的效果。

setTimeoutsetInterval在耽误方面行动相似。而requestAnimationFrame在差别(支撑的)浏览器中,整体来讲维持在了60fps高低。

若想看看切换到一个差别的标签/或许让窗口闲置的效果,直接翻开(我写的测试)页面,切换到别的一个标签中,守候一阵子。它会纪录在标签页闲置时的真正耗时。

测试二:

另一种测试的计划是在setIntervalrequestAnimationFrame中反复地纪录timestamp值,在自力的console窗口中检察效果。你能够看到,在你闲置标签页或许窗口时,它更新的有多频仍(假如它有更新的话)。

效果:

Internet Explorer

在窗口/标签页闲置时,IE对setInterval的延时不作限定;但是IE10+(译注,原文是IE10,本人IE11测试也是一样的效果)在标签页闲置时停息了响应的requestAnimationFrame,不管窗口是不是闲置。

Safari

Safari在窗口/标签页闲置时不停息setInterval,它依旧以一般频次反复运转(setInterval的函数)。在标签页闲置时,requestAnimationFrame停息了。

Firefox

Firefox在标签页闲置时,将setInterval的时候距离限定在1000ms摆布。假如时候距离高于1000ms,则没有响应限定。不管窗口有无闲置,只需你切换到差别的标签页,setInterval的时候距离就会被限定。
在标签页闲置时,requestAnimationFrame的时候距离被限定在1-3秒一帧。

源码

// The default shortest interval/timeout we permit
#define DEFAULT_MIN_TIMEOUT_VALUE 4 // 4ms
#define DEFAULT_MIN_BACKGROUND_TIMEOUT_VALUE 1000 // 1000ms

Chrome

与Firefox行动相似,在标签页闲置的时刻,Chrome将setInterval最小的时候距离闲置在1000ms摆布。
requestAnimationFrame在标签页闲置的时刻被完整停息。

源码

// Provides control over the minimum timer interval for background tabs.
const double kBackgroundTabTimerInterval = 1.0;

Opera

Opera在标签页闲置的时刻不作setInterval的限定。
requestAnimationFrame 不被支撑。在标签页闲置时,requestAnimationFrame停息。(译注:因为新版Opera已支撑了requestAnimationFrame,这里是本人的测试效果。)

总结

标签页闲置时,时候距离:

setIntervalrequestAnimationFrame
IE10+待测试停息
IE9-无影响不支撑
Safari 无影响>=1s停息
Firefox>=1s1s – 3s
Chrome>=1s停息
Opera 无影响>=1s 不支撑 停息

</翻译>

扩大浏览:

《翻译:setInterval与requestAnimationFrame的时候距离测试》

    原文作者:Humphry
    原文地址: https://segmentfault.com/a/1190000000386368
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞