近日,Chrome 开发者 David Bienvenu 在其名为《The Fast and the Curious》系列新博文中,详细“揭秘”了谷歌最近对 Chrome 浏览器所做的一些改进。其中,就包括了谷歌历时 3 年研究创建的 Native Window Occlusion(原生窗口遮挡)项目,可让浏览器启动速度提升 25%。
文章图片
据悉,该博文里解释了谷歌为减少 Chrome 中不可见标签和窗口资源消耗所做的工作。谷歌方面称,该操作让 Chrome 的启动速度提高了 25.8%,崩溃次数减少了 4.5%。
该“揭秘”博文还指出,谷歌公司多年来一直在研究怎么更好地确定哪些 Chrome 窗口和选项卡对用户可见,以便能够适当地分配系统资源。
我们知道,不在焦点的选项卡(又称为“背景选项卡”)可降低 CPU 和 GPU 资源的优先级,但被遮挡的窗口(即打开的窗口,但完全或部分被其他窗口覆盖的窗口)又如何呢?
对于这个问题,Bienvenu 在博文中写道,谷歌方面了解到“20% 的 Chrome 窗口完全被其他窗口覆盖,也就是完全被遮挡。如果这些被遮挡的窗口被视为背景标签,那么我们的假设就将看到显著的性能优势。”
于是,谷歌公司便对“Native Window Occlusion”(原生窗口遮挡)项目展开研究,该项目将允许谷歌了解任何打开的 Chrome 窗口的遮挡状态。当然,要想弄明白这一点,他们还必须得知道非 Chrome 浏览器窗口的位置,但这就不是 Windows 操作系统所能提供的信息了。
考虑到多监视器设置和虚拟桌面等因素,以上问题变得更加棘手。
【谷歌 Chrome 开发者“揭秘”浏览器窗口遮挡问题(启动速度提升25.8%!)】为了解决该问题,谷歌提出了“occlusion calculation(遮挡计算)”方案,它能在 UI 的单独线程中运行,先计算用户的总可见区域,再从虚拟桌面的可见区域中减去所有字作为“遮挡”的 Chrome 窗口,从前到后检查每个打开的窗口,最后再从总数中减去任意打开的窗口。
文章图片
如果是 Chrome 窗口,则会检查其区域是否与未被遮挡的区域重叠;如果非 Chrome 窗口,就意味着 Chrome 窗口完全被以前的窗口覆盖即遮挡。此时,软件会一直运行计算,直到所有的 Chrome 窗口都被标记为遮挡,这意味着剩下的部分必须对用户可见。有了这些信息之后,再向计划程序发布一个任务,以提升浏览器窗口的可见性。
谷歌通过评估隐藏窗口提高 Chrome 性能
有了上面的解决方案,谷歌又提出了一个有趣的问题,“我们希望能多久运行一次计算?”
对于这个问题,Bienvenu 也在博文中做了解答。他表示,持续运行会降低性能,因此必须是选择性的运行。
好在 Windows 系统允许应用程序跟踪移动及调整打开窗口大小之类的事件,所以 Chrome 会连接到这些通知中,当用户移动或调整窗口大小时,Chrome 会发出警报,并决定是否进行新的遮挡计算。
Bienvenu 博文中还指出,该计算是在 16ms 计时器上运行的,该计时器对应每秒显示 60帧(FPS)的间隔。
据了解,早在 2020 年 10 月谷歌就面向全部 Chrome 用户推出了这一方案。如今已经过去了一段时间,谷歌也对外分享了以上“实验”的结果。其中包括:
- 启动速度加快 8.5% 至 25.8%
- GPU内存使用率降低 3.1%
- 整体绘制的渲染器帧减少 20.4%
- 遇到渲染器崩溃的客户端减少 4.5%
- 首次输入延迟提高 3.0%
- 首次内容绘制和最大内容绘制速度提高 6.7%