Chrome如何实现Speedometer 3历史最高得分
今日发布的《The Fast and the Curious》博文深入探讨了Chrome如何在全新的Speedometer 3.0浏览器基准测试中取得最高分数。Speedometer 3.0是一款近期发布的浏览器性能测量基准工具,由谷歌、苹果、Mozilla、英特尔和微软等企业共同合作开发,旨在优化Web应用程序性能。欢迎立即试用Chrome!
基准测试的价值
Speedometer 3.0作为行业协作的成果,帮助我们识别出可以优化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字体(如Apple Mac OS系统字体)的方式。文本首先作为处理后的Unicode字符流,随后转换为字形流,并通过AAT字体中定义的状态机进行处理。这项优化使我们能更快判断字形是否实际参与状态机规则,从而加速AAT文本处理。
代码分层策略
实现高性能的重要策略是代码分层——即在引擎中选择合适的代码进行深度优化。英特尔为V8贡献了配置文件引导的分层技术,该技术会记录历史分层决策,如果某个函数在过去被稳定地分层优化,我们将在后续运行中主动对其进行分层提升。
垃圾回收改进
在Speedometer 3上带来约3%进展的另一项改进涉及垃圾回收机制。V8的垃圾收集器长期以来都利用渲染器空闲时间以避免干扰实际应用程序代码。最近的改进延续了这一理念,扩展了现有机制,尽可能在非常活跃的渲染器的空闲时间执行垃圾收集。具体而言:
-
DOM终结化代码:现在会在空闲时间运行对象回收时的DOM终结化代码。此前这类操作会与常规应用程序代码竞争CPU资源。
-
内存布局优化:V8现在支持为包装DOM元素的对象(即所有暴露给JavaScript框架的对象)采用更紧凑的内存布局。紧凑布局减少了内存压力,从而缩短垃圾收集时间。
发布时间:2024年6月6日
作者:Thomas Nattestad,Chrome产品经理