
出品|开源中国
文|Travis
时常关注 Google Chrome 浏览器更新的用户应该知道 , Google 在过去几年时间里为 Chrome 资源占用和速度提升做出了非常多的改进 , 其中包括标签页冻结、更好的内存管理和释放 , 以及电池优化 。
近日 Google , 在博客中透露了他们如何针对 Chrome 的窗口进行了优化 , 从而使启动速度提高 25.8% , 崩溃次数减少 4.5% 。
Google 此前已经针对 Chrome 浏览器的非活跃标签页进行冻结来减少 CPU、GPU 和内存的使用 , 将更多的系统资源留给用户真正所需的前台标签页 。 但这个方法仅限于那些没有被放置在前台、最小化或被移出屏幕的标签页 。
Google 在实验中发现 , 在用户日常使用中有 20% 的 Chrome 浏览器窗口被其他应用的窗口所覆盖 , 或者说被遮挡 。 因此 Google 设想 , 如果能够把这些被遮挡的窗口也当作后台标签来看待的话 , Chrome 浏览器还会有更加明显的性能提升 。 基于这个设想 , Google 大约在三年前开始研究一个项目 , 该项目能够实时追踪每个窗口的遮挡状态 , 并降低被遮挡窗口中标签的优先级 。
Google 将这个项目称为「Native Window Occlusion」 , 能够获取用户屏幕上的本地非 Chrome 窗口的位置 , 再结合 Chrome 各个窗口自身的位置 , 从而计算出被遮挡的窗口和区域 。
追踪哪些 Chrome 窗口被遮挡有两个主要部分 , 第一部分是遮挡计算 , 包括以 Z 轴为顺序遍历桌面上打开的窗口 , 查看每个 Chrome 窗口前面的窗口是否完全覆盖了它;第二部分是决定何时进行遮挡计算 。
Google 为了防止在进行遮挡计算时阻塞 UI 线程和降低 Chrome 的响应速度 , 他们将遮挡计算放置在一个单独的线程上来进行 , 并考虑了可能出现的众多情况:
- 忽略最小化的窗口 , 因为它们本身就不可见 。
- 将不同虚拟桌面上的 Chrome 窗口标记为被遮挡 。
- 从前到后遍历桌面上打开的窗口 , 忽略不可见窗口、透明窗口、浮动窗口、隐形窗口等 。
- 从未被遮挡的屏幕矩形中减去窗口的区域 。
- 如果窗口是 Chrome 窗口 , 检查其区域是否与未遮挡区域重叠 。 如果没有 , 则表示 Chrome 窗口已被之前的窗口遮挡 。
- 继续迭代 , 直到捕获所有 Chrome 窗口 。
- ……
- 启动速度提高 8.5% 到 25.8%
- 显存使用量减少 3.1%
- 渲染器整体绘制的帧数减少 20.4%
- 渲染器崩溃次数减少 4.5%
- 首次输入延迟降低 3.0%
- 首次内容绘制和最大内容绘制速度提高 6.7%
- Google|这才是“小钢炮”,A15芯片+5.42英寸小屏+140g,已降至4599元起
- Google|空气能取暖设备家用130平方, 大概的多少钱呢
- Google|谷歌为什么当初收购安卓后,不直接闭源收费呢?
- Chrome|ROG游戏手机6规格泄露 首发骁龙8+ Gen 1配18GB LPDDR5内存
- Google|谷歌工程师跟AI聊出感情!他相信AI有意识,有感情,然后被停职了
- Google|自作孽不可活!拜登这波骚操作,可能要把苹果谷歌亚马逊全都爆了
- Google|网站如何在Google建立索引
- Chrome|2022旗舰投影仪|大眼橙X20入手体验
- Google|还等什么Mate50,华为P50售价创新低与手环7成绝妙搭档,真香来袭
- 谷歌Chrome浏览器103正式版发布
