如果页面未处于活动状态,则Chrome会降低javascript的速度

时间:2017-08-17 22:01:23

标签: javascript performance google-chrome settimeout setinterval

如果我编写了一个使用setTimeout / setInterval的javascript代码,如果相关页面未处于活动状态,则时间在Chrome上无效。 要演示,只需使用如下的js代码创建一个html文件:

<script>
    var title = 1;
    setInterval(function(){document.title = "X:"+title; title+=1}, 250);
</script>

多次打开页面,您会看到如果页面未激活,标题将仅在2秒内增加,而不是250毫秒。这是我开发中非常关键的问题。 有谁知道如何逃避它?如果存在,也可以使用简单的Chrome选项。

只是将其标记为不重复:它不适用于动画,而是适用于背景工作。提供的示例非常准确!我需要非常准确地运行脚本并在后台标签中快速执行操作。我知道,99,9999%的人不需要它......

3 个答案:

答案 0 :(得分:1)

这两种功能都没有被认为是准确的。你永远不应该依赖提供的时间跨度。当您的页面不可见时,浏览器会强调这种不准确性。

实际上,使用常规网页继续在后台工作是没有意义的。如果你真的需要那么试试一些WebWorker。该网页用于用户交互......用户交互不会在背景中按意图发生。在后台处理事物最好放在工作线程中。所以,关于运行时上下文匹配代码的概念意图。

答案 1 :(得分:0)

添加 cepharum 具有的功能,无法保证您的代码每250毫秒完全执行一次。 Chrome不是real time operating system,也不是您的代码。根据口译员的实施情况,它甚至可能会出现漂移和延误。

话虽如此,如果您只想减少延迟,您可以使用工作人员通过创建一个不会限制其刷新率的新线程来欺骗系统:

extend

https://jsfiddle.net/DerekL/ouzcdh9g/

答案 2 :(得分:0)

之前我遇到过同样的问题,我解决它的方法是使用数学来计算时差,而不是依赖于setInterval是可靠的。 E.g。

var title = 1;
var tickTime = (new Date()).getTime();
setInterval(function(){
    var now = (new Date()).getTime();
    document.title = "X:"+title; 
    // you can adjust the math calculation below to 
    // meet your requirements
    title+= (now - tickTime)/250;
    tickTime = now;
}, 250);