【问题标题】:setInterval doesn't slow down on inactive tabsetInterval 不会在非活动选项卡上放慢速度
【发布时间】:2017-02-10 05:03:08
【问题描述】:

这可能与一个非常常见的问题相反:当您在一个选项卡上使用 setInterval 并切换到另一个选项卡时,间隔显着减少(即减慢)。这对于音频计时非常明显,因为您可以听到它被放慢了。

但是在最新的 Chrome 56 和 Firefox 51 上,我不能再让它发生了。

但在 Chrome 上,切换标签页的情况非常少见,而且看似随机, 会产生影响。它甚至会出于某种原因限制 Web Worker。

这让我很头疼,因为我正在尝试编写一些需要非常精确计时的 Web Audio API 内容,而我什至看不出 setInterval 和 Web Workers 之间的区别,它们应该在自己的线程上运行。

为什么setInterval 不像以前那样去限制非活动标签页?

更新:即使是通过 Blob URI 加载的 Web Worker 中的 setInterval,在某些情况下也会受到限制,例如切换选项卡。

【问题讨论】:

    标签: javascript google-chrome firefox timer setinterval


    【解决方案1】:

    由于javascript是运行时编译代码(由浏览器在运行时编译,浏览器必须对其进行处理)。当您导航到其他选项卡时,该页面有它自己的脚本,浏览器也必须编译该代码。因此,浏览器为活动选项卡中的脚本分配高优先级,其余选项卡中的脚本分配较低优先级。所以它会影响非活动选项卡上的脚本。但是,如果您的计算机具有更大的可用 RAM,则不会出现此问题。

    【讨论】:

    • 有没有办法模拟低 RAM 或 CPU,或其他参数来触发 可靠的setInterval 节流行为?我需要能够真正确定使用 Web Workers 是否比 vanilla setInterval 或其他 setTimeout 相关解决方案有任何时间优势。
    猜你喜欢
    • 2015-01-16
    • 2011-12-26
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2022-01-17
    • 2016-09-19
    相关资源
    最近更新 更多