編者按:本文做者是來自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 項目的由來和概況有了初步的認識。後續,我會繼續探索更多詳細內容。敬請期待。