Chrome如何在Speedometer 3中创下历史最高分

本文详细解析Chrome团队如何通过优化JavaScript执行、垃圾回收机制和代码分层策略,在Speedometer 3浏览器性能测试中实现72%的性能提升,涵盖具体技术实现如SpaceSplitString优化、DOM解析加速和AAT字体渲染改进。

Chrome如何在Speedometer 3中创下历史最高分

2024年6月6日,星期四

今天的《The Fast and the Curious》系列文章将探讨Chrome如何在全新的Speedometer 3.0测试中取得最高分。Speedometer 3.0是升级版的浏览器基准测试工具,用于优化Web应用程序性能。立即试用Chrome!

Speedometer 3.0是近期发布的浏览器性能基准测试工具,由谷歌、苹果、Mozilla、英特尔和微软等公司共同合作开发。该基准测试帮助我们识别了可以优化Chrome的领域,从而为用户提供更快的浏览器体验。

以下是我们通过持续跟踪性能表现,进一步优化Chrome以在Speedometer 3中创下历史最高分的详细过程。自2022年5月Speedometer 3启动以来,我们将Chrome的Speedometer得分提升了72%——这直接转化为用户的实际性能提升:

优化工作负载

通过分析Speedometer中的工作负载以及Chrome在哪些函数上花费最多时间,我们能够对这些函数进行针对性优化,从而提升Chrome的得分。例如,SpaceSplitString函数被大量用于将空格分隔的字符串(如"class=‘foo bar’")转换为列表表示。在此函数中,我们移除了一些不必要的边界检查。当我们检测到重复的样式表时,会对它们进行去重并引用单个样式表实例。我们通过调整内存分配来降低绘制路径和弧线的成本。在创建表单编辑器时,我们检测到创建表单元素时发生的一些不必要处理。在querySelector中,我们能够检测常用选择器并为其创建热路径。

我们之前分享过如何通过专门的快速路径优化innerHTML解析,这一实现也被WebKit采纳。Speedometer 3中的某些工作负载使用DOMParser,因此我们扩展了相同的优化,获得了额外的1%性能提升。

我们与Harfbuzz维护者合作,优化了Chrome渲染AAT字体(如苹果Mac OS系统字体)的方式。文本从处理后的Unicode字符流开始,然后转换为字形流,再通过AAT字体中定义的状态机运行。这项优化使我们能够更快地确定哪些字形实际参与状态机规则,从而在使用AAT处理文本时获得加速。

选择正确的代码进行优化

实现高性能的一个重要策略是代码分层,即在引擎中选择正确的代码进行进一步优化。英特尔为V8贡献了配置文件引导的分层技术,该技术会记住过去的分层决策,如果某个函数在过去被稳定地分层提升,我们会在后续运行中积极提升其层级。

改进垃圾回收

在Speedometer 3上带来约3%进展的另一个改进领域是垃圾回收。V8的垃圾收集器长期以来一直利用渲染器空闲时间,避免干扰实际应用程序代码。最近的变更延续了这一理念,扩展了现有机制,尽可能在非常活跃的渲染器的空闲时间进行垃圾回收。具体来说,现在在回收对象时运行的DOM终结代码也会在空闲时间执行。以前,此类操作会与常规应用程序代码竞争CPU资源。此外,V8现在支持更紧凑的对象布局,这些对象包装了DOM元素,即所有暴露给JavaScript框架的对象。紧凑的布局减少了内存压力,从而减少了垃圾回收时间。

发布者:Thomas Nattestad,Chrome产品经理

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计