【问题标题】:What is Chromium's "Throttle Javascript timers in background" feature and how to handle it?什么是 Chromium 的“后台限制 Javascript 计时器”功能以及如何处理它?
【发布时间】:2020-11-14 17:00:40
【问题描述】:

自 Chromium 86 版以来,添加了一个名为“后台限制 Javascript 计时器”的新实验性功能,以解决 Chromium 浏览器的高电池消耗问题。

描述说:

在顶部窗口已被隐藏 5 分钟的窗口中,计时器可以 运行:

  • 每隔 1 分钟对齐一次,或者,
  • 如果窗口与顶部窗口同源,> 最后一个计时器在树中任何同源窗口中运行 1 分钟后 与顶部窗口。

在后台运行时间少于 5 分钟的页面中,保留 将定时器唤醒时间调整为 1 秒的现有策略 间隔。

他们指的是DOM函数setTimeoutsetInterval吗?在这些情况下具体如何处理?

我想每 5 秒有一个 setInterval,一旦标签被隐藏 5 分钟,它将被修改为 60 秒。对setTimeout 执行相同操作可能会导致许多作业在返回选项卡时同时运行。跳过这些可能会破坏逻辑,因此简单的作业队列可能会导致网站出现其他问题。

那么,该功能究竟是如何工作的?而且,开发人员如何确保在节流处于活动状态时他们的逻辑不会中断?

【问题讨论】:

  • "跳过这些可能会破坏逻辑" - 不,任何使用计时器的逻辑都必须始终deal with being delayed
  • @Bergi 被延迟不是跳过,这是两件不同的事情。我同意您的观点,即任何开发人员都不应该依赖在正确的时间运行的计时器,但我不知道在正常情况下主机可以取消计时器,这个功能将来会应用。
  • 我以为您指的是队列实现跳过作业。不,计时器永远不应该被取消,我不明白你是怎么做到的。 “节流”在这里意味着“延迟”。你能链接到你引用的完整文章吗?
  • @Bergi 不,我没有引用关于“跳过”的内容。我的观点是:如果定时器没有被跳过/取消,而是被延迟,那么如果不同的定时器在那个受限制的时间范围内唤醒,它们可能会导致巨大的瓶颈。如果这些延迟,它们将在您返回选项卡或分钟时间范围结束时同时触发。这似乎也不适合我。我希望更深入地解释节流的作用,确切地
  • This document(链接自the announcment post)有更多详细信息

标签: javascript chromium


【解决方案1】:

正如它在锡上所说的那样:背景和隐藏选项卡不会以高频率运行 JS 计时器。允许的最短时间间隔变成一整分钟,这样您的页面就不会因为代码执行甚至没人看的事情而耗尽人们的电池。

解决方案是编写适当的页面逻辑,并且在无人看时根本不运行任何代码。这意味着为您的页面提供blurfocus 处理程序,以便您的代码可以停止和恢复需要在超时或间隔上运行的事情。毕竟:如果没有人在看,您的页面“不需要”做任何事情,因为不需要整个页面。

【讨论】:

  • 使用visibilitychange 代替blurfocus
  • 谢谢,您的解决方案适用于任何只会导致对主体进行 DOM 操作的东西。但是还有其他方法可以显示叫醒结果,例如播放声音、发送活动通知或更新标题的网站。我相信开发人员(了解此功能)可以在其中工作,我只是想知道究竟对这个功能有什么期望。 “背景和隐藏选项卡不会以高频率运行 JS 计时器。”,所以总而言之,它们只是被跳过了?
  • “最低间隔”您的意思是“最小间隔”吗?不是母语人士,但 IMM 的“低”/“高”声音更适合 频率,并且它们具有反比关系,这使得这个表述非常不清楚。
猜你喜欢
  • 2014-05-31
  • 2012-10-01
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多