javascript - Chromium 的“Throttle Javascript timers in background”功能是什么以及如何处理它?
问题描述
从 Chromium 86 版开始,添加了一个名为“Throttle Javascript timers in background”的新实验功能,以解决 Chromium 浏览器的高电池消耗问题。
描述说:
在顶部窗口已隐藏 5 分钟的窗口中,计时器可以运行:
- 每隔 1 分钟对齐一次,或者,
- 如果窗口与顶部窗口同源,则在最后一个计时器在树中与顶部窗口同源的任何窗口中运行后 > 1 分钟。
在后台运行时间少于 5 分钟的页面中,保留现有的以 1 秒间隔对齐来自计时器的唤醒的策略。
他们指的是 DOM 函数setTimeout
吗setInterval
?在这些情况下究竟是如何处理的?
我想setInterval
每 5 秒有一个,一旦标签被隐藏 5 分钟,它就会被修改为 60 秒。执行相同的setTimeout
操作可能会导致许多作业在返回选项卡时同时运行。跳过这些可能会破坏逻辑,因此简单的作业队列可能会导致网站出现其他问题。
那么,该功能究竟是如何工作的呢?而且,开发人员如何确保在节流处于活动状态时他们的逻辑不会中断?
解决方案
这就是它在锡上所说的:背景和隐藏选项卡不会以高频率运行 JS 计时器。允许的最短时间间隔变成一整分钟,这样您的页面就不会因为代码执行甚至没人看的事情而耗尽人们的电池。
解决方案是编写适当的页面逻辑,并且在没有人查看时根本不运行任何代码。这意味着您的页面有一个blur
和focus
处理程序,以便您的代码可以停止和恢复需要在超时或间隔上运行的事情。毕竟:如果没有人在看,你的页面“需要”什么都不做,因为不需要整个页面。
推荐阅读
- jenkins - 如何使用 ${currentBuild.result} 表示“SUCCESS”而不是“null”
- javascript - 用于选择产品尺寸或颜色的类似电子商务的功能
- angular - 获取所有数据后显示表格(ag网格)
- android - “远程调试 JS”在做什么?
- three.js - 如何将 Blender 3D 模型导入到 three.js
- java - 无法传输工件 org.springframework.boot
- android - 尝试使用 adb 推送/安装 .apk 时出错
- c# - 在 ComboBoxItem 问题的单击事件后,WPF 将 ComboBox 设置为 -1 索引
- amazon-web-services - AWS EMR 立即处理日志在 S3 中的登陆
- pandas - Pandas groupby 内存不足