中文:林克拉克翻译:oschina

https://www . oschina . net/translate/how-Firefox-get-fast-再次

人们注意到火狐又变快了。

在过去的七个月里,我们一直在快速更换引擎的主要部件,在Firefox中使用Rust和部分伺服。另外还有一个基于代码的问题,明显或者不明显都严重影响浏览器性能。

我们称之为“量子工程”,火狐量子的第一个常规版本将于明天发布。

但这并不意味着我们的工作已经完成,也不意味着未来Firefox的速度和响应速度不会提高。

那么,让我们看看Firefox是如何再次变快的,以及它在哪里变快。

以粗粒度并行为基础

为了加快速度,我们必须利用过去10年的硬件变化。

我们不是第一个这样做的。Chrome刚推出的时候比Firefox更快更灵敏。原因之一是Chrome工程师看到了硬件的变化,更好的利用了硬件。

一种新型的中央处理器正在变得流行。这些CPU有多个内核,这意味着它们可以独立完成任务,但也是并行的。

这可能会变得棘手。利用CPU的并行性,可能会出现一些难以查看和调试的细微错误。例如,如果两个内核需要在内存中向同一个阵列添加一个,如果不够小心,很容易出现一个覆盖另一个的问题。

避免这些各种bug的一个非常简单的方法是确保只有两件事在不共享内存的情况下运行——将一个大任务划分为不需要您的程序中太多协作的子任务,这就是所谓的粒度并行。

在浏览器中,这些粗粮是相当容易找到的,每个标签都是独立工作的。而围绕页面的东西——Chrome浏览器——可以独立处理。

这样,页面可以同时工作,而不会相互阻塞。如果后台选项卡中有长时间运行的脚本,它不会阻塞前台选项卡的工作。

这是Chrome工程师预见到的机会,我们也看到了,但是实现的道路更加坎坷。因为我们有一个现有的代码库,我们需要计划如何分割代码库来利用多核。

过了一段时间,我们意识到了。随着这个“电解”项目的实现,我们终于实现了对所有用户默认启用多进程。Quantum使用了粗粒度并行,甚至比其他项目更好。

电解

“电解”为量子工程奠定了基础,量子工程引入了类似Chrome的多进程架构。因为这是一个重大的改变,我们和一小部分用户在2016年开始慢慢引进和测试,然后在2017年年中推给所有Firefox用户。

量子合成器

量子合成器把合成器转移到自己的进程。这里最大的成功就是让Firefox更加稳定。有一个单独的进程意味着一旦镜像驱动崩溃,它不会崩溃所有的Firefox页面。这个独立的过程让Firefox反应更灵敏。

量子DOM

即使内容窗口在内核之间被分割,并且一个主线程被分配给每个内核,主线程仍然需要执行许多任务。而且有些比其他更重要。例如,响应一个键比运行垃圾收集更重要。Quantum DOM为我们提供了一种先处理这些任务的方法。这使得Firefox的响应速度更快。这项工作大部分已经完成,但我们仍然计划采用一些称为抢先调度的方法。

充分利用硬件的细粒度并行性

然而,当我们展望未来时,我们需要超越粗粒度并行。

粗粒度并行更好地利用了硬件……但它没有充分利用硬件。当您将网页分配给不同的内核时,有些内核可能无法工作。所以这些核心都是闲置的。同时,如果CPU是单核的,新的内核启动新的页面需要更长的时间。

如果所有的内核都可以用来处理新页面,那就太好了。这样,你可以更快地完成工作。

但是如果使用粗粒度并行,就无法将任何任务从一个内核分离到另一个内核,任务之间也没有边界。

借助细粒度并行性,您可以将较大的任务分解成较小的单元,以便将其发送到不同的内核进行处理。比如你有一个像Pinterest这样的网站,你可以把它分成不同的固定模块,送到不同的内核进行处理。

这不仅有助于减轻延迟,如粗粒度并行。也有助于提高速度。页面加载会更快,因为计算被分解成不同的计算核心。随着您添加更多计算内核,页面加载速度会更快。

所以我们看到这是未来,但如何到达那里并不完全清楚。为了使这种细粒度并行更快,通常需要在内核之间共享内存。但这会带来我们之前说的数据竞争问题。

但是我们知道浏览器必须做出这种改变,所以我们开始投资研究。我们创造了一种没有这些数据竞争问题的语言——RUST。然后,我们创建了一个浏览器引擎——SERVER,以充分利用这种细粒度的并行性。通过这一点,我们证明了这一点可以发挥作用,可以在加快速度的同时减少错误的发生。

量子CSS

有了Stylo,CSS风格渲染在所有CPU内核中完全并行化。Stylo使用一种称为“工作窃取”的技术来有效地分离内核之间的工作,从而使每个内核保持忙碌。通过这种技术,可以获得线性加速效果。您可以通过使用您拥有的所有内核来为CSS样式渲染分配时间。

量子渲染

关于硬件的另一部分是GPU,可以高度并行,有几百个内核。即便如此,我们还是需要保证GPU的多核尽可能的保持工作,从而提高效率,这也是WebRender所做的。

WebRender计划于2018年推出,它将充分利用现代GPU。同时,我们也从另一个角度解决这个问题。高级图层项目修改Firefox现有的图层系统,支持批量渲染。通过优化Firefox目前的GPU使用模式,我们取得了立竿见影的效果。

???

我们相信渲染管道的其他部分也可以从这种细粒度的并行性中受益。在接下来的几个月里,我们将仔细研究,看看这些技术可以在哪里使用。

我们保证Firefox会越来越快,再也不会变慢

除了我们必须做出的这些主要的架构改变之外,一些性能缺陷已经进入了代码库而没有引起我们的注意。

所以我们构建了quantum的另一部分来修复它,它会发现这些问题,然后Mozilla团队会解决这些问题。

量子流

Quantum Flow的团队很强,但是他们不关注具体子项目的进度。他们主要关注一些特殊场景,比如社交媒体信息流的加载,研究如何让Firefox加载更快。

量子流给我们带来了巨大的性能优势。在这个过程中,我们还开发了工具和特定的流程,以便更容易地发现和跟踪类似的问题。

量子流现在怎么样了?

在这个过程中,我们非常成功——一次识别并专注于一个关键案例——并使其成为我们工作流程的一部分。为了做到这一点,我们将改进我们的工具,所以我们不再需要一个专门的团队来解决具体的问题,而是会有更多的工程师来跟踪这些问题并解决它们。

但是这个方法有一个问题。当我们优化一个用例时,我们需要反向优化另一个用例。为了防止这种现象,我们增加了许多新的痕迹,包括改进CI自动化性能测试、遥测跟踪用户体验和bug内部回归管理。通过这些行动,我们期待火狐Quantum越来越好。

明天只是开始

明天对我们Mozilla来说是重要的一天。在过去的一年里,我们一直在努力让Firefox变得更快,但这只是开始。

在接下来的时间里,我们将继续发布新的改进,并与您分享。

去试试火狐Quantum in Release或Developer Edition,确保每个人都能得到最新的更新。

最近北京发货正常,但是发货时间延长了。

1.《火浏览器 火狐浏览器是如何又变快起来的?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《火浏览器 火狐浏览器是如何又变快起来的?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/yule/1663879.html