Mozilla

火狐社区

登录    注册

QQ互联

我们的年度回顾(二):如何在 2020 年使 Firefox 变得更快

yingliu Mozilla员工 发表于 2020-12-30 16:23:01 | 只看该作者 [复制链接] 打印 上一主题 下一主题
1 19684
跳转到指定楼层
本帖最后由 yingliu 于 2021-1-21 18:17 编辑



今年我们与以往的经历都不一样。全球疫情影响了我们的学习、沟通、工作、娱乐、购物等方方面面。因此,普遍开放和可访问的互联网对我们的日常生活变得越来越重要。对于某些 Firefox 用户,访问互联网不仅重要,而且至关重要。

当 Firefox 团队调整为专注于功能和改进以帮助用户过上基于互联网的生活时,性能计划加速了我们的努力,以实现“为每个用户的体验带来性能”的愿景。我们希望通过加快 Firefox 和 Gecko 的关键部分(如页面加载、JavaScript 响应性和启动)的速度,并确保新功能发挥最佳性能,我们可以使新标准的痛苦减轻更多。

考虑到这一点,我们想分享今年最引以为豪的工作,并重点介绍如何使每个版本的 Firefox 比上一个版本更快。今年以来,我们取得了很多成就,并将这些成就分为几个部分,这些与我们对工作的看法有关:

  • “每次体验的性能”详细介绍了 Firefox 本身的所有更改。
  • “性能文化”包括所有开发测试、指标、流程和其他工作的工作,以确保性能对于 Firefox 构建的所有内容都至关重要。
  • 最后,“以正确的速度浏览”涵盖了在 Mozilla 生态系统之外提高 Web 性能的工作。

每次体验的表现
我们认为与浏览器和网页的交互应该快速流畅,页面加载快,网络反应灵敏,并且资源得到了周到的利用。这是我们期望所有 Mozilla 产品的基准性能。 2020 年,我们改善了所有这些领域。

页面加载
  • Firefox 75 包括对惰性图像加载标准的支持。通过在需要时而不是在初始页面加载的关键路径上加载图像,此功能可以提高页面加载性能并减少数据。
  • Firefox 80 添加了针对 Flexbox 回流的优化。在某些情况下,这可以将页面加载性能提高 20%以上,并减少页面加载期间的布局偏移。
  • Firefox 82 具有推测性 JavaScript 解析功能,允许浏览器在提取外部 JavaScript 脚本后就对其进行解析,即使它们从未执行过也是如此。此更改通常将页面加载量提高3-4%,但对于某些网站,可以将页面加载量提高 67% 以上。
  • Firefox 83 引入了新的 Warp 在 SpiderMonkey JavaScript 引擎中的功能。
  • Firefox 84 增加了对链接预加载的支持,这使开发人员可以更好地控制资源加载,并且可以将页面加载提高10% 以上。
  • 年底发布的新版 Android Firefox 浏览器的页面加载速度比年初增加了20%,使其成为有史以来最快的 Android Firefox 浏览器。

反应性
  • Firefox 72 对 Firefox 管理插件阻止列表的方式进行了更改,从而使启动和会话还原时间缩短了 7%。
  • 完成了 Fast Shutdown 项目的三个计划阶段的前两个阶段,从而使 Firefox 关闭速度提高了三倍。
  • Firefox 85 Nightly for Windows 包括一个用于启动的新框架 UI,这意味着Firefox 启动的第一个迹象发生的时间是以前的10%。Firefox 感知性能的这种改进对于速度较慢的计算机上的用户特别有用。我们希望默认在2021年初发布这种新体验。
  • 在启动时为 about:home 页面实现了一个缓存,从而将启动时 Top Sites 呈现的时间缩短了 20% 以上。
  • 在需要时延迟加载 Firefox UI 的部分而不是自动加载,会导致浏览器窗口打开得更快。在 Firefox 77 和 Firefox 80 之间,一旦 Firefox 在Windows 上的使用时间减少,打开新窗口的时间减少了大约10%。
  • 启用 WebRender 后,Firefox 81 可以在 macOS 上为 60fps VP9 视频提供更好的播放质量。
  • WebRender 还包括用于着色器编译的优化,可将启动和会话还原时间缩短10% 以上。
  • 年底发布的新版 Firefox for Android 打开了来自其他应用程序的链接,速度提高了 25%。在某些设备上,这意味着它比旧版 Android Firefox 快60%。
  • 与2019年6月发布的 MVP 相比,一般初创公司的进步并不大。虽然通常不是要庆祝的理由,但是在添加功能以将浏览器从 MVP 开发到旗舰Firefox 的同时能够做到这一点 Android 上的浏览器是一个相当大的成就。
  • Firefox(Android 版)还对用户界面关键部分的响应速度进行了许多改进,包括准确性和触摸滚动控制,降低的摇动抖动,键盘显示速度,键入时出现的文字以及菜单对用户输入的响应。

资源使用
Firefox 83 包括对 MacOS 的 WebRender 支持,并进一步改善了功耗,特别是在滚动或观看视频时。这项工作建立在 2019 年末发布的改进的基础上,并将macOS 上的 Firefox 功耗降低了 300%。

表现文化
我们相信,为 Mozilla 产品做出贡献的每个人都有自己的表现。为了使所有人共享所有权,性能计划必须建立经过验证的测试,工具,指标和其他资源(例如:仪表板、文档)的基础,以使每个人都能够理解和影响浏览器的性能。在2020 年,我们改进了测试基础架构,并增强了性能工具以衡量改进并诊断性能下降。

  • 通过添加内存、网络、冷/热页面加载和实时页面加载的类别,改进了性能仪表板 https://arewefastyet.com。还添加了 WebRender 和Fission 变体的结果。
  • 引入并改进了警长效率度量标准,用于测量警长分类和引发回归错误所需的时间。这些指标是9月提高绩效的时事通讯的重点。
  • 引入了使用 PerfDocs 动态测试文档
  • 推出了用于分析和共享性能测试结果的 mach perftest
  • 增加了对在单个 CI 作业中的多个构建中以批处理模式运行性能测试的支持,从而在不影响覆盖范围的情况下更有效地利用了机器时间。
  • 对 Perfherder 的一些改进,包括支持以批处理模式运行的测试提取结果,在比较视图中对结果进行排序的功能以及改进的错误模板。

衡量问题
  • 在用于 Android、Linux 和 macOS 的持续集成(CI)管道中引入了用于页面负载测试的视觉指标,预计Windows 将于今年年底发布。这项工作用流行的开源浏览器时间工具取代了我们专有的页面加载引擎。
  • 完成了针对 Firefox 启动的新的基于视觉完整性的测试的第一个版本,以提供有关 Firefox 启动速度的更具用户代表性的视图。
  • 引入了 mach perftest,这是一种用于性能测试的现代框架,旨在简化运行和编写测试。所有新测试都将使用此框架,并且随着时间的推移,现有测试将迁移到该框架。一些团队已经利用了这个新的测试框架,包括 QUIC 和 Fenix。
  • 增强的 mach perftest以支持网络限制,并将其用于我们的第一个用户旅程测试以比较 http/2 和 http/3。
  • 将冷页和热页合并加载到单个 CI 作业中,减少了总执行时间,同时增加了测试覆盖率。

帮助功能团队
  • 用 Firefox 的新 Profiler 工具栏替换了Gecko Profiler 附加组件,统一了台式机和远程移动配置文件的记录流(最终为 Firefox 工程师和 Web 开发人员)。
  • 设置事件探查器也变得更加容易。一旦 Profiler 图标出现在工具栏中,开始/捕获快捷方式就将起作用。通过“工具->启用它 Web Developer –不再需要启用 Profiler 菜单按钮”。
  • 探查器的侧边栏可方便地汇总当前选择的堆栈/叶。我们看到它使我们的用户感到高兴,因此我们通过在“呼叫树”中将其默认设置为“打开”来使其更加突出。
  • 现在,在 Profiler 时间轴中右键单击标记可提供与标记表和图形相同的上下文菜单;让您选择往返时间和复制数据。
  • 媒体团队将第一个自定义预设添加到事件探查器,使贡献者可以快速访问具有所有必要线程和设置的录制媒体性能。
  • 如果符号转换失败,则 Profiler 的元数据下拉列表现在提供了一个方便的按钮来重新触发该过程。
  • 拖动配置文件以加载它们(以前只能在首页上使用)现在也可以在加载的配置文件上使用。
  • 配置文件存储后端已迁移到 Mozilla 拥有的官方存储空间。
  • Firefox Profiler 对显示主线程 I/O 的 FileIO 标记的支持已得到扩展,可以显示主线程 I/O 的标记,甚至对未采样的线程也显示标记。
  • Firefox 探查器已被 Firefox工程师成功用于改善 Firefox 性能,现已可供 Web 开发人员使用。它取代了传统的“ Performance” devtools 面板。使用 Firefoxdevtools 中的 Firefox Profiler 将显示配置文件,并以新视图集中在当前选项卡上。
  • Markers 2.0 –自助探查器标记:在 Gecko 中,您可以告诉您标记的外观,它会出现在 Firefox Profiler 前端中您想要的位置,而无需修补前端。
  • 添加了删除配置文件的功能,从而为用户提供对存储的配置文件的代理。

向用户学习
  • 创建了一个新的信息中心,以更轻松地从 Google Play 商店评论和 support.mozilla.org 论坛等来源中识别与性能相关的用户反馈。
  • 开发了用于观察分析的概念验证技术,该技术将性能指标的更改与用户行为指标相关联。
  • 在台式机和移动设备上进行实验,以告知船舶决策并指导与启动,页面加载,链接预加载和 Warp 相关的性能优化。
  • 作为改善真实用户指标的项目的一部分,开始了性能遥测的审计和差距分析。
  • 添加了新的遥测技术,以更好地了解与速度较慢的启动,长时间运行的脚本和由此引起的浏览器挂起有关的性能和用户影响,移动性能,使用链接预加载时的页面加载性能,垃圾回收和JavaScript 执行时间,以及更细粒度的页面加载指标。
  • 向 Background Hang Reporter 添加了注释,以更好地了解 Firefox UI 中发生的挂起及其对用户的影响。

以正确的速度浏览
这意味着为网络建立正确的性能。在性能(“轻松”选择)和目标(“正确”选择)之间没有权衡。Mozilla的独特定位是在对网络用户有利的方面和对网络构建者有利的方面之间取得平衡。这包括影响网络标准,并找到使每个人都更快的网络的方法(无论位置,收入或浏览器如何)。性能计划的成员还积极参加W3C Web 性能工作组。

今年,为 Google 的 Web Vitals 提案的讨论和反馈做出了贡献。这包括对最大内容绘画(LCP)指标的内部分析,以及如何将其与现有性能指标(视觉指标和标准化 Web 性能API)进行比较,Mozilla 在内部使用这些指标来测试台式机和移动设备的性能。我们的分析发现,虽然LCP 是对某些先前页面加载指标的有希望的改进,但是当呈现时间不可用时,该指标的值会大大降低。这项工作为在2021年实现更完整的 Web Vitals 奠定了基础,并缩小了台式机和移动设备上的度量与性能分析功能之间的差距。

2020年,我们还在 Firefox 的 PerformanceEventTiming API实现上取得了进展。

下一步是什么

2020 年底并不是 Firefox 性能工作的终点,而是标志着我们进步的里程碑。我们还有很多要做的事情。

在接下来的几个月中,我们将继续致力于提高浏览器关键区域的响应能力,例如长时间运行的脚本会导致挂起,站点内导航和启动。我们还将为 2021 年下半年与 Firefox 如何使用 CPU,电池和网络带宽之类的资源奠定基础。改善页面加载的工作将继续进行,重点放在性能下降上,这会导致性能严重下降。同样,我们将继续努力发展整个 Firefox 组织的性能文化并影响更广泛网络的性能。

我们希望我们在 2020 年的工作可以使新常态对您的痛苦减轻一些。我们对 2021 年的目标是雄心勃勃的,因此我们邀请您加入我们的行列,以努力使正常生活变得越来越痛苦。至少在浏览网页时。





我是小学生 社区新人
沙发
发表于 2020-12-31 21:55:16 | 只看该作者
加油努力
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表