Chrome谷歌浏览器最小化和页面遮挡后JS代码不稳定和功能失效的解决思路
记录一次Chrome谷歌浏览器最小化和页面被遮挡后JS脚本功能失效的解决思路,浏览器上某一标签页在满足某些条件时,会设置该标签为“背景标签”,而随着时间越长,可能会出现 动画延迟或停止渲染、JavaScript 代码(定时器)停止执行、精准程度下降等影响。
1. 前言:
一位客户向我定制了一款网页版区块链游戏自动挂机脚本,主要需求是定时派遣队伍外出打工,定时派回等功能。
脚本我主要用JavaScript代码来实现,用定时器 setInterval()、setTimeout() 来定时点击页面上的元素,然后给浏览器安装个Tampermonkey油猴插件将JS脚本丢进去,网页一打开代码就能自动运行,最后只要在服务器上挂着游戏就行啦 !
在一天漫长的挂机后,进入服务器却发现脚本离奇的停止了 (俺已经确认了这段代码没BUG)。
在反复测试几遍后,发现挂机时间越长,出现概率越大,而且,只要将浏览器最小化,脚本就十分不稳定,出现部分按钮偶尔无法被点击到等稳定性问题。
2. 原因 :
查阅资料后发现,谷歌为减少电脑内存过多不必要的损耗,带来浏览器的性能提升,向 Windows 上的所有 Chrome 浏览器加入一项名为“本地窗口遮蔽(Native Window Occlusion)” 的新功能。
“本地窗口遮蔽”功能可以节制后台标签的优先级,以减少浏览器的资源使用,并将“更多内存、CPU 和 GPU 留给前台标签”
简单来说:浏览器上某一标签页在满足某些条件时,会设置该标签为“背景标签”,而随着时间越长,可能会出现 动画延迟或停止渲染、JavaScript 代码(定时器)停止执行、精准程度下降等影响。
满足条件包括但不限于以下几点:
- 浏览器最小化的时候,标签页都被视为背景标签;
- 当屏幕被锁定时,所有 Chrome 窗口都被视为背景标签;
- 当我们浏览器将当前页面A切换到另外一个标签页B时,A被视为背景标签;
3. 解决方法: (仅支持chrome 9.7及以前版本)
1. 谷歌浏览器中访问链接: chrome://flags/
2. 搜索Calculate window occlusion on Windows
,把该项的设置改成 Disable
注: 如果搜索不到,先搜索 Temporarily unexpire M96 flags ,改为Enabled,再搜索上面的内容
3. 重启浏览器。
本方法需要客户端手动更改浏览器配置,适用于只在 Windows 版的 Chrome 浏览器中有效。
对于项目而言,可以参考大佬用到的解决办法:当浏览器切换到其他标签页或者最小化时,你的js定时器还准时吗?
更多推荐
所有评论(0)