编者按:本文做者是来自360奇舞团的前端开发工程师安佳,同时也是 W3C 性能工做组成员。html
quantum 这个词来自拉丁语 quantus,意思是 how great - 多么伟大前端
Quantum 是 Mozilla 为了构建下一代 Web 引擎的项目。在正式介绍它以前,咱们须要先了解一些浏览器的相关知识。html5
图1. 浏览器结构,源自 How Browsers Workc++
渲染引擎(Rendering Engine)也叫布局引擎(Layout Engine)。浏览器的渲染引擎,有时也简称为浏览器引擎(Browser Engine)。git
注意:这里的 Browser Engine 不一样于图1中的 Browser enginegithub
因此,如下名词每每是等价的:
浏览器的渲染引擎 ~ 浏览器引擎 ~ 渲染引擎 ~ 布局引擎后端
主流浏览器用到的渲染引擎以下:浏览器
浏览器 | 渲染引擎(开发语言) | 脚本引擎(开发语言) |
---|---|---|
Chrome | Blink (c++) | V8 (c++) |
Opera | Blink (c++) | V8 (c++) |
Safari | Webkit (c++) | JavaScript Core (nitro) |
FireFox | Gecko (c++) | SpiderMonkey (c/c++) |
Edge | EdgeHTML (c++) | Chakra JavaScript Engine (c++) |
IE | Trident (c++) | Chakra JScript Engine (c++) |
之因此列出“脚本引擎”,旨在强调渲染引擎不负责 JS。对 JS 的解释和执行是由独立的引擎完成的,好比大名鼎鼎的 V8 引擎。安全
对 HTML 文档来讲,渲染引擎的主要任务就是解析 HTML 和 CSS,再把最终的结果绘制到屏幕上。性能优化
下面是各个渲染引擎的时间线,咱们能够很直观地看出她们的生日和年龄。其中,Trident、KHTML、Presto 已经中止更新;Gecko、Webkit、Blink 和 Edge 依然在持续更新中。
图2. 浏览器引擎,源自维基百科 Browser engine
2013年,Mozilla 启动了一项研究型项目 Servo。这是一个从零开始设计的浏览器引擎,目标是提升并发性和并行性,同时减小内存安全漏洞。它是由 Rust 语言编写的,而 Rust 有更好的内存安全属性和并发功能。
2016年4月,考虑到 Servo 还须要几年才能成为功能完备的浏览器引擎。因此,Mozilla 决定启动 Quantum 项目,将 Servo 的稳定部分带到 Firefox 里。
关于集成到 Firefox 中的 Servo 组件,可查看 Jack Moffitt 的演讲视频 Web Engines Hackfest1
Gecko 是 Mozilla 的一个成熟且功能健全的 Web 浏览器引擎,它起源于1997年的 Netscape。Mozilla 采用渐进式的方法,将 Servo 里已稳定的组件迁移到 Gecko 中,用户将没必要等很长时间就能看到 Firefox 在稳定性和性能上的显著改进。
2017年11月发布的 Firefox 57 是初版启用了 Servo 组件的浏览器,以后便在此版本的基础上进行迭代开发。
Quantum 以 Gecko 引擎为基础,同时利用了 Rust 的良好并发性和 Servo 的高性能组件,为 Firefox 带来了更多的并行化和 GPU 运算,让 Firefox 更快更可靠。
Quantum 是一个将 Mozilla 的多个社区及其代码仓库联系在一块儿的大项目,它包含多个子项目:
至此,你们对 Quantum 项目的由来和概况有了初步的认识。后续,我会继续探索更多详细内容。敬请期待。