Chrome 57 中的背景标签页

后台标签页可能会对浏览器性能产生显著的负面影响,尤其是对电池续航时间。为了缓解这个问题,Chrome 已安排 对后台标签页的各种限制。 我们最近做了大量工作来进一步改进,本文档概要介绍了 Chrome 政策。本文重点介绍 Chrome 57 中的当前政策。 如需了解长期策略和后续计划,请参阅此文档

针对后台优化应用

Web 开发者应注意,用户通常会在后台打开许多标签页,这可能会严重影响功耗和电池续航时间。在后台运行 应尽可能降低,除非确实有必要 提供出色的用户体验通过 页面可见性 API 使用 检测网页何时在后台运行,并暂停所有不必要的工作,例如视觉更新。

对于某些网站,此简单优化可将 CPU 使用量最多减少 75%:

var doVisualUpdates = true;

document.addEventListener('visibilitychange', function(){
    doVisualUpdates = !document.hidden;
});

function update() {
    if (!doVisualUpdates) {
    return;
    }
    doStuff();
}

政策

requestAnimationFrame()

根据文档,当网页在后台运行时,Chrome 不会调用 requestAnimationFrame()。自 2011 年以来,此行为已生效。

后台定时器对齐

Chrome 11 开始,每个独立计时器每秒最多运行一次。Chrome 会分批运行这些计时器 每秒一次,确保将进程唤醒次数保持在最低限度。 播放有声音频的网页会被视为可见于用户,并会被豁免于后台计时器节流。音频停止播放后,豁免将持续数秒,以允许 将下一首曲目加入队列。

请注意,当且仅当 Chrome 显示音频图标时,音频才会被视为可听。 静默音频流不会授予豁免权。

基于预算的后台计时器节流

在 Chrome 57 中提供, 基于预算的计时器节流是对计时器校准机制的进一步扩展, 对后台计时器 CPU 使用率施加额外的限制。其运作方式如下:

  • 每个后台标签页都有一个用于在后台运行计时器的时间预算(以秒为单位)。
  • 页面在后台运行 10 秒后,将受到时间预算限制。
  • 只有在时间预算为非负数时,才能运行计时器任务。
  • 计时器执行完毕后,系统会从预算中减去其运行时间。
  • 预算会随着时间的推移不断重新生成(目前设为 0.01 秒)。请注意,此预算再生率可调整为 Chrome 会收集有关限制行为的更多数据。

以下几种情况会自动豁免于此节流限制:

  • 播放音频的应用会被视为在前台运行,因此不会受到限制。
  • 使用实时连接(WebSocket 和 WebRTC)的应用,以避免因超时而关闭这些连接。在这些情况下,系统仍会应用“每秒运行一次计时器”规则。

请注意,他的机制使用的是实际用时,而不是 CPU 时间。 它是 CPU 时间的近似值,并且会减少阻塞主线程的 。

最后,请记住,如果您在后台使用耗时较长的任务,您的应用 可能会在很长一段时间(最多为任务时长 100 倍)内被限制。 将您的工作分成多个部分(每 50 毫秒或更短时间) 性能指南 并使用 visibilityChange 监听器来避免在后台执行不必要的工作。

拒绝联系

Chrome 会为--disable-background-timer-throttling 运行测试套件和其他需要用户批准的繁重计算任务。