在过去的六个月中,Firefox 性能团队实施了一些更改以改进启动、响应能力、安全性 (Fission) 和 Web 标准。 Doug Thayer 和 Emma Malyz 使用称为骨架 UI 的概念实施了改进 Firefox 在 Windows 上的感知启动的工作。 Windows 上的用户可能会单击 Firefox 图标,但不会在他们期望 Firefox 启动的时间线中获得视觉反馈。所以他们再次点击图标。然后再次。然后他们的屏幕看起来像这样。启动需要很长时间的原因是在Firefox启动之前需要发生很多事情。作为启动的一部分,我们需要启动 JS 引擎,加载配置文件以获取窗口的大小和位置。我们还需要加载一个名为 XUL.dll 的大型库,它需要大量时间从磁盘读取,尤其是在您的计算机速度较慢的情况下。那么骨架UI实现了哪些改变呢?基本上在点击图标后,我们会立即显示一个窗口,表明 Firefox 正在启动。骨架 UI 的最终版本查看用户过去的会话并创建一个带有主题、窗口尺寸、工具栏内容和位置的窗口。您可以在此视频中看到它的外观,其中右侧以骨架 UI 启动。这些更改现在可以在 Firefox 92 beta 上使用,并在路上发布!在解决启动问题的其他有影响力的工作中,去年夏天,性能团队的实习生 Keefer Rourke 为文件 IO 编写了一个简化的 API,称为 IOUtils,用于与特权 JavaScript 一起使用。 Emma Malyz 和 Barret Rennie 以及贡献者将现有的启动代码迁移到 IOUtils 以提高启动性能。
以前,当 Firefox 用户遇到某个页面的脚本运行超过某个时间阈值时,您会看到一条警告消息,如下所示: 对于许多人来说,此警告出现频率过高,原因不明,选项或者接下来的步骤令人困惑。 Doug Thayer 和 Emma Malyz 于 2021 年初开始工作,以减少遇到慢速脚本警告的用户比例。实施的解决方案改变了用户体验,因此警告只会在用户与挂起的页面交互时显示。他们还添加了代码来归咎于导致挂起的页面并删除令人困惑的“等待按钮”。 Sean Feng 实施了一些更改,使用户交互更严格地与下一帧将在屏幕上呈现的时间保持一致。通过确保 Frame 始终包含所有未决用户交互的结果,这使 Firefox 感觉更灵敏。在移动设备上,Sean 还实施了一些更改,以提高移动设备的响应速度。 Sean 登陆代码以允许合并更多的 touchmove 事件以更有效地生成事件。 Sean 的工作加上 Matt Woodrow 在 bug 中的 vsync 工作的影响反映在上图中。要了解有关 Firefox 中其他响应性更改的更多信息,Bas Schouten 的博客文章提供了更多详细信息。 Fission 是 Firefox 中的站点隔离。如果您想了解更多信息,请阅读 Anny Gakhokidz 和 Neha Kochar 撰写的这篇详细而全面的博客文章,以了解 Fission 在 Firefox 中的实施和推出。 Sean Feng 和 Randell Jesup 进行了更改,以改进与 NSS 初始化和 http 接受设置相关的进程切换,以便在 Fission 的进程预分配中进行。 Windows 上的几个页面都有改进(谷歌搜索约 9%,bing 约 5%,gmail 约 3-4%,Microsoft 约 2-3%);这应该将进程切换时间减少 6-8 毫秒,可能高达 10 毫秒。以前,我们看到 20-40 毫秒的时间可归因于切换进程。
性能事件计时 API 由 Sean Feng 在所有平台上的 Firefox 89 中启用。该 API 为网页作者提供了对由用户交互触发的某些事件的延迟的洞察,这是 Web Vitals 的先决条件。要了解更多信息,请阅读 1667836 – Prototype PerformanceEventTiming、公告和规范。 Denis Palmeiro 向上游浏览器时间添加了 Firefox 内存支持。接下来的步骤是在 CI 中实施一些测试,以便我们持续获取测量结果。 Andrew Creskey 添加了 Perfstats 支持,允许我们为运行时的任何组件收集低开销计时。马库斯·贾里茨、埃里克·史密斯、亚当·加什林、莫莉·豪威尔、克里斯·马丁、吉姆·马蒂斯、亚伦·克洛茨、弗洛里安·奎兹、吉斯·克鲁特博斯、迈克·康利、马库斯·斯坦奇、艾玛·马利兹、道格·塞耶、丹尼斯·帕梅里奥、肖恩·冯、安德鲁·克雷斯基、巴雷特·雷尼,本杰明德科斯尼克,巴斯 Schouten 马克勒克莱尔和迈克科梅拉。特别感谢 Doug Thayer 的艺术作品,以显示骨架 UI 中的变化和缓慢的脚本工作!