Chrome:超时/间隔暂停在后台标签中?

2022-08-30 02:03:44

我正在测试使用此测试的准确性。现在我注意到(如预期的那样)不是很准确,但对于大多数电器来说,这并不是非常不准确。现在,如果我在Chrome中运行测试并让它在后台选项卡中运行(因此,切换到另一个选项卡并在那里浏览),返回测试并检查结果(如果测试完成),它们就会发生巨大变化。看起来超时运行速度要慢得多。在FF4或IE9中测试,没有发生这种情况。setTimeoutsetTimeout

因此,看起来Chrome会暂停或至少减慢javascript在没有焦点的选项卡中的执行速度。在互联网上找不到很多关于这个主题的东西。这意味着我们无法运行后台任务,例如,使用XHR调用在服务器上定期检查,并且(我怀疑看到相同的行为,如果时间与我同在,将编写测试)。setIntervalsetInterval

有人遇到过这种情况吗?是否有解决这种暂停/减速的解决方法?你会把它称为一个错误吗,我应该这样归档吗?


答案 1

我最近问了这个问题,这是设计的行为。当选项卡处于非活动状态时,仅以每秒最多一次的速度调用该函数。下面是代码更改

也许这会有所帮助:当标签页在Chrome中处于非活动状态时,如何使setInterval也正常工作?

TL;DR:使用 Web Workers


答案 2

有一个使用Web Workers的解决方案,因为它们在单独的进程中运行并且不会减慢速度

我写了一个小脚本,可以在不更改代码的情况下使用 - 它只是覆盖了setTimeout,clearTimeout,setInterval,clearInterval等函数。

只需在所有代码之前包含它

http://github.com/turuslan/HackTimer