本文由chaussen在众成翻译平台翻译。
有人已经注意到火狐浏览器又变快了。
过去七个月里,我们不断地把浏览器引擎里一些重要部分尽快换掉,并在火狐里引入了Rust语言和Servo引擎组件。此外,我们还对代码基进行了一次性能突击大检查,寻找各种性能问题,无论是明显还是不明显的。
这个项目我们就称之为量子(Quantum)项目,而新生的火狐浏览器量子版(Firefox Quantum)将在明天第一次全面发行。
但这并不意味着我们的工作已经完成了。并不是说今天的火狐又能像过去那样快速运行、迅速反应了。
那么,我们看看怎么样使火狐又能快起来,还有哪些方面可以使它变得更快吧。
过去十年里电脑硬件改变了许多。要让浏览器速度更快,我们就需要利用这些硬件的变化。
我们不是第一个这样做的。Chrome浏览器刚问世时速度就比火狐更快,反应也更快。原因之一就是Chrome的工程师那时就看到了硬件正在发生的变化,并开始更好地利用新型硬件。
以前有一种新型的CPU越来越普遍。这种CPU拥有多个核,所以能够同时并行处理多个任务,而任务之间互不干扰。
当然这也会造成一些麻烦。并行运算可能会带来一些细微的差错,很难发现也很难纠正。比如,如果双核需要给内存中的一个数字加一,不特别小心处理的话,一个核很可能把另一个核的操作结果覆盖掉。
要避免这类差错,有一个相当直接的方法:只要保证正在进行的两部分不用共享内存就行了。把程序分割成比较大的几个任务,任务之间用不着太多配合,这就是粗粒并行运算技术。
这种粗粒部分浏览器里很容易就能找到,如每个浏览器标签都各有各的工作要做。另外还有网页周围的那个东西——浏览器边框,也可以分开处理。
这样做,每个页面都能以自己的速度同步运行,而不会互相妨碍。即使某个后台标签有一个脚本运行时间很长,也不会阻碍当前标签的任务。
Chrome的工程师预见到了这种机遇,我们也是。但实现这一步,我们走过的路更曲折些,因为我们已有的代码基需要经过计划、想好如何进行分割后才能利用好多核技术。
虽然花了不少时间,但是我们还是做到了。通过电解(Electrolysis)项目,我们最终将默认运行模式改为多进程模式,并对所有用户都有效。而量子项目以及其它几个项目则进一步改善了粗粒并行运算技术的应用。
电解项目为量子项目打下了根基。它首次采用了一种多进程架构,和Chrome当年采用的类似。因为这个变动相当大,引入的过程很缓慢。我们从2016年开始,先在小组用户范围内进行测试,到2017年中期才初次向所有火狐用户推出。
量子合成器项目将合成器移到了它自己的进程上,其最大的好处就是使火狐更稳定。独立的进程就意味着即使显卡驱动崩溃,火狐也不会整个崩溃。不但如此,这个独立的进程也使火狐反应更快。
即便每个内容窗口都被分配到不同的核上,并且都拥有独立的主线程,每个主线程仍然有很多任务要完成。有些任务要比别的任务更重要,如响应按键的任务比垃圾回收任务重要。靠量子文档对象模型项目,我们找出办法设定这些任务的优先级别,这让火狐反应更迅速。这项任务的大部分已经落实了,但我们还打算利用一种名叫占先调度(pre-emptive scheduling)的技术,把这项任务进行得更深入些。
然而为未来考虑,我们要做的还不止是粗粒并行运算。
粗粒并行能更好地利用硬件,但并不能充分利用硬件。把网页分配给不同的核处理时,有些核并没有什么任务可处理,所以只能闲置在那里。与此同时,因为一个网页一个核,所以打开单个新网页所花的时间并不比单核CPU少。
单个新网页加载时最好能够动用所有的核去处理,这样加载才能完成得更快。
但粗粒并行技术无法把一个核的任务再分割出来给另外的核,因为这种技术的任务之间没有界限。
有了细粒并行技术,我们可以把大的任务分成小的任务单元,然后发送到不同的核上去。比如,在Pinterest网站上可以把各种收藏项目分开,然后给不同的核处理。
这样做不仅能像粗粒并行一样帮助减少延迟,还能提高纯速度。因为加载任务由所有的核共同承担,网页加载得更快。核的数量越增加,网页加载就越快,有多少核就有多快。
我们之前看到了这一点,意识到它是未来的趋势,但并不完全清楚该怎么做。因为要快速运用细粒并行技术,一般都需要在核之间共享内存。但那样就会造成刚才提过的数据竞速问题。
但我们也明白浏览器必然要经过这个改变,所以我们开始投入资源进行调查。我们创作了一个避免数据竞速的新语言Rust,然后又创作了一个浏览器引擎Servo,能充分利用这种细粒并行运算技术。通过调查,我们证明了这是行得通的,而且实际上可能速度更快、差错更少。
有了Stylo功能,就可以利用所有的CPU核全面并行运算CSS样式。Stylo功能用了一种叫偷活(work stealing)的技术,高效地把工作分配给不同的核,使所有的核都有活干。有了这个技术,实际时间就等于CSS样式运算所需时间除以CPU核的数量,所以速度直线上升。
硬件还有一个高度并行化的部分是GPU。GPU有几百或几千个核。当然要保证这些核尽量满负荷工作,有很多方面要计划。那就是WebRender渲染器的作用。
WebRender渲染器会在2018年得到落实,到时新式的GPU将会发挥作用。与此同时,我们还从另一个角度解决了这个问题。高级分层(Advanced Layers)项目修改火狐现有的层系统,使之支持批量渲染。这优化了火狐目前的GPU使用模式,效果即刻显现。
我们还考虑了渲染通道有哪些其它部分可以从这种细粒并行运算技术中获益。在接下来的几个月里,我们会更仔细地研究,看还有哪里可以用到这些技术。
这些大的架构变动是我们之前已经想好要实施的。除此之外,我们一不注意,就有一些性能方面的差错混进了代码基里。
于是,我们量子项目又创建了一个分部来修复差错,基本上就是一个浏览器性能突击检查队,发现问题、部署人手、进行修复。
担任此次突击任务的就是量子流项目团队。他们把注意力集中在某些非常特定且重要的用例上,而不是集中在某个子系统的整体性能上。比如加载社交媒体新闻在火狐上的反应速度比其它浏览器慢,他们整队合作分析出原因。
量子流项目给我们带来了许多性能方面的巨大提升。在这个过程中,我们也开发了几个工具,建立了几个流程,将来寻找追踪此类问题就变得更容易。
那现在量子流项目怎么样了?
这个项目每次都只锁定一个关键用例,再集中处理。我们采用的这个流程非常成功,以后准备把它化为工作流程的常规部分。为了做到这一点,我们正在完善各种工具,这样就不必再等专家突击搜寻问题了,而可以让整个组织中来自各部门的更多的工程师都可以发现问题。
但这种措施有一个问题,一个用例优化的同时可能会另一个用例就无法优化。为了防止这种事发生,我们新加了许多追踪信息,包括改进持续集成自动运行性能测试,用遥测技术追踪用户体验,以及差错内部的回归管理。这样,我们希望火狐量子能不断变得更好。
对我们这些Mozilla的人来说,明天是个重要的日子。为了让火狐提速,我们在过去一年里一直在努力奋斗。但那也只是个开始。
在接下来的一年里,我们会继续使性能方面有新的提高,希望能再与大家分享!
要试用火狐浏览器,去火狐量子发行版或开发者专用版,保证用到最新版本。
Lin是Mozilla开发者事务(Developer Relations)团队的工程师。她用JavaScript,WebAssembly,Rust,和Servo进行了一些修补工作,并为代码画了漫画。
原文来自:众成翻译
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
支持全球约2.4万个城市地区天气查询,如:天气实况、逐日天气预报、24小时历史天气等
支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景
涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。
根据给定的手机号、姓名、身份证、人像图片核验是否一致
通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。