Firefox 中更快的 Vue.js 执行

Speedometer 3 是一个跨行业的努力,旨在建立一个现代浏览器基准测试,其根源在于现实世界中的用户体验。它的目标是集中浏览器工程力量,使 Web 对于实际用户在实际页面上的运行更加流畅。这很难做到,而且大多数浏览器基准测试都做得不好,但我们认为这是一个独特的机会,可以广泛地提高整个 Web 的响应能力。

这需要对生态系统进行刻意分析——从真实的用户体验开始,并识别支持它们的必要技术元素。我们从头开始构建了几个新的测试,并将 Speedometer 2 中的一些现有测试更新为使用更现代版本的广泛使用的 JavaScript 框架。

当 Vue.js 测试从 Vue 2 更新到 Vue 3 时,我们 注意到 Firefox 中存在一些性能问题。问题的根源是 Proxy 对象的使用,它 是在 Vue 3 中引入的.

代理很难优化,因为它们的设计本质上是通用的,并且可以以各种令人惊讶的方式进行操作(例如,在初始化后修改陷阱函数,或用另一个代理包装代理)。它们在引入时也不太常用在性能关键路径上,因此我们在最初的实现中主要关注正确性。

Speedometer 3 得出了一些证据表明,如今的一些代理行为良好,是关键路径,并且被广泛使用。因此,我们 优化了这些代理,使其完全在 JIT 中执行——专门针对在调用站点遇到的代理的形状,并避免重复工作。这使得 Vue.js 中的响应式操作速度明显加快,我们还预计其他工作负载也将得到改进。

此更改已在 Firefox 118 中发布,因此目前已在 Beta 版中,并将在 9 月底之前发布到正式版。

在过去的一年中,Firefox 在 Vue.js 基准测试上的性能 提高了约 40%,这得益于类似这样的工作。更重要的是,正如我们希望的那样,随着我们对 Speedometer 3 的优化,我们观察到 Firefox 中所有页面加载的实际用户指标都有所改善。我们将在后续文章中分享有关此方面的更多详细信息。

关于 Brian Grinstead

Brian Grinstead 的更多文章…