【发布时间】:2020-11-14 17:00:40
【问题描述】:
自 Chromium 86 版以来,添加了一个名为“后台限制 Javascript 计时器”的新实验性功能,以解决 Chromium 浏览器的高电池消耗问题。
描述说:
在顶部窗口已被隐藏 5 分钟的窗口中,计时器可以 运行:
- 每隔 1 分钟对齐一次,或者,
- 如果窗口与顶部窗口同源,> 最后一个计时器在树中任何同源窗口中运行 1 分钟后 与顶部窗口。
在后台运行时间少于 5 分钟的页面中,保留 将定时器唤醒时间调整为 1 秒的现有策略 间隔。
他们指的是DOM函数setTimeout和setInterval吗?在这些情况下具体如何处理?
我想每 5 秒有一个 setInterval,一旦标签被隐藏 5 分钟,它将被修改为 60 秒。对setTimeout 执行相同操作可能会导致许多作业在返回选项卡时同时运行。跳过这些可能会破坏逻辑,因此简单的作业队列可能会导致网站出现其他问题。
那么,该功能究竟是如何工作的?而且,开发人员如何确保在节流处于活动状态时他们的逻辑不会中断?
【问题讨论】:
-
"跳过这些可能会破坏逻辑" - 不,任何使用计时器的逻辑都必须始终deal with being delayed。
-
@Bergi 被延迟不是跳过,这是两件不同的事情。我同意您的观点,即任何开发人员都不应该依赖在正确的时间运行的计时器,但我不知道在正常情况下主机可以取消计时器,这个功能将来会应用。
-
我以为您指的是队列实现跳过作业。不,计时器永远不应该被取消,我不明白你是怎么做到的。 “节流”在这里意味着“延迟”。你能链接到你引用的完整文章吗?
-
@Bergi 不,我没有引用关于“跳过”的内容。我的观点是:如果定时器没有被跳过/取消,而是被延迟,那么如果不同的定时器在那个受限制的时间范围内唤醒,它们可能会导致巨大的瓶颈。如果这些延迟,它们将在您返回选项卡或分钟时间范围结束时同时触发。这似乎也不适合我。我希望更深入地解释节流的作用,确切地。
-
This document(链接自the announcment post)有更多详细信息
标签: javascript chromium