Chrome:超时/间隔暂停在后台标签中?
我正在使用这个testing来testing setTimeout
的准确性。 现在我注意到了(如预期的那样) setTimeout
不是很准确,但是对于大多数电器来说不是非常不准确的。 现在,如果我在Chrome中运行testing并让它在后台选项卡中运行(所以切换到另一个选项卡并在那里浏览),返回testing并检查testing结果(如果testing完成),它们将发生显着变化。 它看起来像超时运行慢很多。 testing在FF4或IE9这没有发生。
所以看起来像Chrome暂停或至less放慢JavaScript没有焦点的执行。 无法find关于这个问题的networking。 这意味着我们不能运行后台任务,比如例如使用XHR调用和setInterval
定期检查服务器(我怀疑看到setInterval
的相同行为,如果时间与我在一起,将会写一个testing)。
有没有人遇到过这个? 会不会有解决这个暂停/减速的方法? 你会把它称为一个错误,我应该这样归档吗?
我最近问到这个,这是devise行为。 当选项卡处于非活动状态时,每秒最多只能调用一次该function。
也许这有帮助: 我怎样才能使setInterval也工作,当一个选项卡在Chrome中不活动?
代码更改: http : //codereview.chromium.org/6577021
有一个使用Web Workers的解决scheme,因为它们在单独的进程中运行,并且不会变慢
我写了一个小脚本,可以在不改变你的代码的情况下使用它 – 它只是覆盖函数setTimeout,clearTimeout,setInterval,clearInterval
只需在您的代码之前包含它
我更新了我的jQuery核心到1.9.1,并解决了非活动标签中的间隔差异。 我会尝试第一,然后看看其他代码覆盖选项。