w3ctech

揭秘量子时代下的Firefox

摘要:在(浏览器)都已经快步入量子时代的大背景下,(那么,就让我们来看一下),Firefox是如何利用量子技术来提升浏览器的自身速度以及来感受一下变快的地方究竟有哪些?

相信很多人都已经注意到,Firefox的速度又变快啦。 Tweet from Sara Soueidan about Firefox Nightly being fast (为啥呢?这是因为),在过去的七个月里,我们已经把(Firefox)引擎的一些核心部分给替换掉啦,并且让该引擎支持Rust语言。然后就是把Servo浏览器的一些核心功能给移植进去啦。在这里,我多插一句(plus),对于那些(导致浏览器出现性能问题的)代码来说,不管该性能问题明显与否,都是需要被清除出去的,这是因为我们对性能问题采取的是高压态势。(we’ve had a browser performance strike force scouring the codebase for performance issues, both obvious and non-obvious)

(对啦),这个项目被我们称之为Quantum,(另外,再告诉大家一个好消息),第一个Firefox Quantum release版本将于明天全面发行。 Firefox Quantum release (虽说Firefox Quantum版本快要发布啦),不过这并不意味着我们的工作已经结束啦。这也说明了现在的这款Firefox浏览器,在速度以及响应方面还未达到预期( It doesn’t mean that today’s Firefox is as fast and responsive as it’s going to be)

所以让我们来看一下,Firefox Quantum浏览器是如何提升自身速度的以及来感受一下浏览器变快的地方究竟有哪些吧。

具有(粗细)粒度的并行(机制)为浏览器的提速定了基础(Laying the foundation with coarse-grained parallelism)

为了能够让Firefox浏览器跑得更快,我们是需要使用上述方式的。(不过需要说明的是),在经历了过去的10年,硬件早已不是当年的“吴下阿蒙”啦(we needed to take advantage of the way hardware has changed over the past 10 years)。 (另外,需要说明的是),我们并不是第一个来做这件事的浏览器厂商。(举个栗子),在coarse-grained parallelism 的概念刚推出不久,(你会发现),Chrome浏览器就已经在启动速度以及响应速度上超过我们啦。(那么问题来了,为啥Chrome工程师会引入coarse-grained parallelism)?其中的一个原因就是,他们注意到硬件正在经历一场变革;另外就是,他们已经开始着手(如何)更好地应用新型硬件(的研究啦)。 scope02

(现在),新型的CPU越来越吃香啦。(而且你会发现),这些CPU(或多或少)都有一些共性:例如多核。这就意味着,他们可以做到独立处理任务而互不影响,不过在同一时刻,他们还是会以并行的方式来处理任务的。

(值得注意的是,上述处理方式)可能会(让某些问题变得)非常棘手。(这是因为),有了并行机制,你很容易就写出神奇的bug(指的是那些难以发现以及难以调试的bug)。举个栗子,假设CPU的两个(处理器)内核都需要把内存的某个数字加一,又假如在写代码的时候没有注意到(上面所提到的)异步机制,那么很有可能就会出现计算结果被覆盖的“惨案”。

race_condition

(那么问题来了,我们应该如何)规避这类bug呢?最简单的做法其实是,确保处理的(两件)事情不共享内存地址( the two things you’re working on don’t have to share memory)。(讲的通俗一点就是),把你的主任务(program)拆成(几个)相对独立且比较大的任务,这也就很好地诠释了什么是具有粗细粒度的并行机制。

(对于浏览器来说),在它里面找到一些有关于粒度(coarse grains)的例子,还是比较容易的。比如,每个选项卡都有一些属于自己单独的任务(Have each tab as its own separate bit of work)。还有就是,跟浏览器(browser chrome)相关的一些“周边”(指的是网页)也是可以被单独处理的(There’s also the stuff around that webpage—the browser chrome—and that can be handled separately)。

这种方式(的好处就是),让tab页在保持自己的节奏的同时,不阻塞其它tab页。(举个栗子),假设你现在有一段代码(指的是耗时较长的代码)需要被执行,(最好的做法就是),把这些代码丢到后台tab页运行,那样执行代码就不会阻塞前台tab页啦。

(上面所讲的)这些(其实)就是那些Chrome工程师所看到的“先机”。(不过我想说的是),先机我们也看到啦,不过我们这一路走的有点坎坷。这是因为,我们之前是有一些老代码(code base)的,(在我们看到这个“先机”之后),我们就开始了如何拆分老代码以及拆分后的代码如何利用CPU多核特性的爬坑之旅啦。

scope04

虽说爬坑也花了一些时间,不过最后我们还是爬出来啦。(不过话说回来),也正是由于Electrolysis项目的出现,让这些特性(指的是针对所有用户默认开启多进程)才得以实现。(另外,我们也发现),Quantum已经能够让一些项目比较好的应用coarse-grained parallelism机制啦。

graphs-draft01

未完待续

前端圈微信

扫码关注前端圈微信公众号

共收到0条回复