主流瀏覽器的內核介紹

內核

首先得搞懂瀏覽器內核究竟指的是什么。
瀏覽器內核又可以分成兩部分:渲染引擎(layout engineer 或者 Rendering Engine)和 JS 引擎。它負責取得網頁的內容(HTML、XML、圖像等等)、整理訊息(例如加入 CSS 等),以及計算網頁的顯示方式,然后會輸出至顯示器或打印機。瀏覽器的內核的不同對于網頁的語法解釋會有不同,所以渲染的效果也不相同。所有網頁瀏覽器、電子郵件客戶端以及其它需要編輯、顯示網絡內容的應用程序都需要內核。JS 引擎則是解析 Javascript 語言,執行 javascript 語言來實現網頁的動態效果。
最開始渲染引擎和 JS 引擎并沒有區分的很明確,后來 JS 引擎越來越獨立,內核就傾向于只指渲染引擎。有一個網頁標準計劃小組制作了一個 ACID 來測試引擎的兼容性和性能。內核的種類很多,如加上沒什么人使用的非商業的免費內核,可能會有 10 多種,但是常見的瀏覽器內核可以分這四種:Trident、Gecko、Blink、Webkit。

Trident (['tra?d(?)nt])

Trident(IE內核):該內核程序在 1997 年的 IE4 中首次被采用,是微軟在 Mosaic(”馬賽克”,是互聯網歷史上第一個獲普遍使用和能夠顯示圖片的網頁瀏覽器,從此網頁可以在圖形界面的窗口瀏覽) 代碼的基礎之上修改而來的,并沿用到 IE11,也被普遍稱作 “IE內核”。
Trident實際上是一款開放的內核,其接口內核設計的相當成熟,因此才有許多采用 IE 內核而非 IE 的瀏覽器(殼瀏覽器)涌現。由于 IE 本身的 “壟斷性”(雖然名義上 IE 并非壟斷,但實際上,特別是從 Windows 95 年代一直到 XP 初期,就市場占有率來說 IE 的確借助 Windows 的東風處于 “壟斷” 的地位)而使得 Trident 內核的長期一家獨大,微軟很長時間都并沒有更新 Trident 內核,這導致了兩個后果——一是 Trident 內核曾經幾乎與 W3C 標準脫節(2005年),二是Trident 內核的大量 Bug 等安全性問題沒有得到及時解決,然后加上一些致力于開源的開發者和一些學者們公開自己認為 IE 瀏覽器不安全的觀點,也有很多用戶轉向了其他瀏覽器,Firefox 和 Opera 就是這個時候興起的。非 Trident 內核瀏覽器的市場占有率大幅提高也致使許多網頁開發人員開始注意網頁標準和非 IE瀏覽器的瀏覽效果問題。
補充:IE 從版本 11 開始,初步支持WebGL 技術。IE8 的 JavaScript 引擎是 Jscript,IE9 開始用Chakra,這兩個版本區別很大,Chakra 無論是速度和標準化方面都很出色。
國內很多的雙核瀏覽器的其中一核便是 Trident。
Window10 發布后,IE 將其內置瀏覽器命名為 Edge,Edge 最顯著的特點就是新內核 EdgeHTML。

Gecko (['gek??])

Gecko(Firefox 內核):Netscape6 開始采用的內核,后來的 Mozilla FireFox(火狐瀏覽器) 也采用了該內核,Gecko 的特點是代碼完全公開,因此,其可開發程度很高,全世界的程序員都可以為其編寫代碼,增加功能。因為這是個開源內核,因此受到許多人的青睞,Gecko 內核的瀏覽器也很多,這也是 Gecko 內核雖然年輕但市場占有率能夠迅速提高的重要原因。
事實上,Gecko 引擎的由來跟 IE 不無關系,前面說過 IE 沒有使用 W3C 的標準,這導致了微軟內部一些開發人員的不滿;他們與當時已經停止更新了的 Netscape 的一些員工一起創辦了 Mozilla,以當時的 Mosaic 內核為基礎重新編寫內核,于是開發出了 Gecko。不過事實上,Gecko 內核的瀏覽器仍然還是 Firefox (火狐) 用戶最多,所以有時也會被稱為 Firefox 內核。此外 Gecko 也是一個跨平臺內核,可以在Windows、 BSD、Linux 和 Mac OS X 中使用。

Webkit

一提到 webkit,首先想到的便是 chrome,可以說,chrome 將 Webkit內核 深入人心,殊不知,Webkit 的鼻祖其實是 Safari?,F在很多人錯誤地把 webkit 叫做 chrome內核(即使 chrome內核已經是 blink 了),蘋果都哭瞎了有木有。
Safari 是蘋果公司開發的瀏覽器,使用了KDE(Linux桌面系統)的 KHTML 作為瀏覽器的內核,Safari 所用瀏覽器內核的名稱是大名鼎鼎的 WebKit。 Safari 在2003 年 1 月 7 日首度發行測試版,并成為 Mac OS X v10.3 與之后版本的默認瀏覽器,也成為蘋果其它系列產品的指定瀏覽器(也已支持 Windows 平臺)。
如上述可知,WebKit 前身是 KDE 小組的KHTML 引擎,可以說 WebKit 是 KHTML 的一個開源的分支。當年蘋果在比較了 Gecko 和 KHTML 后,選擇了后者來做引擎開發,是因為 KHTML 擁有清晰的源碼結構和極快的渲染速度。
Webkit內核 可以說是以硬件盈利為主的蘋果公司給軟件行業的最大貢獻之一。隨后,2008 年谷歌公司發布 chrome 瀏覽器,采用的 chromium 內核便 fork 了Webkit。

Chromium/Bink

2008 年,谷歌公司發布了 chrome 瀏覽器,瀏覽器使用的內核被命名為 chromium。
chromium fork 自開源引擎 webkit,卻把 WebKit 的代碼梳理得可讀性提高很多,所以以前可能需要一天進行編譯的代碼,現在只要兩個小時就能搞定。因此 Chromium 引擎和其它基于 WebKit 的引擎所渲染頁面的效果也是有出入的。所以有些地方會把 chromium 引擎和 webkit 區分開來單獨介紹,而有的文章把 chromium 歸入 webkit 引擎中,都是有一定道理的。
谷歌公司還研發了自己的 Javascript 引擎,V8,極大地提高了 Javascript 的運算速度。
chromium 問世后,帶動了國產瀏覽器行業的發展。一些基于 chromium 的單核,雙核瀏覽器如雨后春筍般拔地而起,例如 搜狗、360、QQ瀏覽器等等,無一不是套著不同的外殼用著相同的內核。
然而 2013 年 4 月 3 日,谷歌在 Chromium Blog 上發表 博客,稱將與蘋果的開源瀏覽器核心 Webkit 分道揚鑣,在 Chromium 項目中研發 Blink 渲染引擎(即瀏覽器核心),內置于 Chrome 瀏覽器之中。

webkit 用的好好的,為何要投入到一個新的內核中去呢?

Blink 其實是 WebKit 的分支,如同 WebKit 是 KHTML 的分支。Google 的Chromium 項目此前一直使用 WebKit(WebCore) 作為渲染引擎,但出于某種原因,并沒有將其多進程架構移植入Webkit。

后來,由于蘋果推出的 WebKit2 與 Chromium 的沙箱設計存在沖突,所以 Chromium 一直停留在 WebKit,并使用移植的方式來實現和主線 WebKit2 的對接。這增加了 Chromium 的復雜性,且在一定程度上影響了 Chromium 的架構移植工作。

基于以上原因,Google 決定從 WebKit 衍生出自己的 Blink 引擎(后由 Google 和 Opera Software 共同研發),將在 WebKit 代碼的基礎上研發更加快速和簡約的渲染引擎,并逐步脫離 WebKit 的影響,創造一個完全獨立的 Blink 引擎。這樣以來,唯一一條維系 Google 和蘋果之間技術關系的紐帶就這樣被切斷了。

Google 和蘋果在多個領域都是競爭對手,而唯獨在瀏覽器引擎上有技術合作,利益一致。但為了各自的利益,誰都不會拿出 100% 的 “誠意” 來做好 WebKit,因為你做出來的成果競爭對手可以直接享用。移動互聯網已經崛起,手機和平板設備端必將成為瀏覽器的另一個戰場。這個時候,如果 Google 跟蘋果仍然黏在一起,將會嚴重阻礙雙方的進步,也會阻礙 WebKit 的進步。
據說 Blink 刪除了 880w 行webkit 代碼。

Presto (['prest??])

Presto 是挪威產瀏覽器 opera 的 “前任” 內核,為何說是 “前任”,因為最新的 opera 瀏覽器早已將之拋棄從而投入到了谷歌大本營。
Opera 的一個里程碑作品是 Opera7.0,因為它使用了 Opera Software 自主開發的 Presto 渲染引擎,取代了舊版 Opera 4 至 6 版本使用的 Elektra 排版引擎。該款引擎的特點就是渲染速度的優化達到了極致,然而代價是犧牲了網頁的兼容性。

Presto 加入了動態功能,例如網頁或其部分可隨著 DOM 及 Script 語法的事件而重新排版。Presto 在推出后不斷有更新版本推出,使不少錯誤得以修正,以及閱讀Javascript 效能得以最佳化,并成為當時速度最快的引擎。
然而為了減少研發成本,Opera 在 2013 年 2 月宣布放棄 Presto,轉而跟隨 Chrome 使用 WebKit 分支的 Chromium 引擎作為自家瀏覽器核心引擎,Presto 內核的 Opera 瀏覽器版本永遠的停留在了 12.17。在 Chrome 于2013 年推出 Blink 引擎之后,Opera 也緊跟其腳步表示將轉而使用 Blink 作為瀏覽器核心引擎。

Presto 與開源的 WebKit 和經過谷歌加持的 Chromium 系列相比毫無推廣上的優勢,這是 Opera 轉投 WebKit 的主要原因,并且使用 WebKit 內核的 Opera 瀏覽器可以兼容谷歌 Chrome 瀏覽器海量的插件資源。但是換內核的代價對于 Opera 來說過于慘痛。使用谷歌的WebKit 內核之后,原本快速,輕量化,穩定的 Opera 瀏覽器變得異常的卡頓,而且表現不穩定,Opera 原本舊內核瀏覽器書簽同步到新內核上的工作 Opera 花了整整兩年時間,期間很多 Opera 的用戶紛紛轉投谷歌瀏覽器和其他瀏覽器,造成了眾多的用戶流失。時至今日現在還有上千萬人在使用老版本的 Opera。
很多人都認為 Opera 瀏覽器終止在了 12.17,此后所更新的 Opera 版本號不再是原來那個 Opera。
關于移動端

移動端的瀏覽器內核主要說的是系統內置瀏覽器的內核。

目前移動設備瀏覽器上常用的內核有 Webkit,Blink,Trident,Gecko 等,其中 iPhone 和
總結

瀏覽器內核主要指的是瀏覽器的渲染引擎,2013 年以前,代表有 Trident(IE),Gecko(firefox),Webkit(Safari chrome 等)以及 Presto(opera)。2013 年,谷歌開始研發 blink 引擎,chrome 28 以后開始使用,而 opera 則放棄了自主研發的 Presto 引擎,投入谷歌懷抱,和谷歌一起研發 blink 引擎,國內各種 chrome系的瀏覽器(360、UC、QQ、2345 等等)也紛紛放棄 webkit,投入 blink 的懷抱。

還有一點文章里沒有說的很明白,就是 Webkit 其實是 KHTML 的分支,這里的 KHTML 指渲染引擎,Webkit 其實就泛指了 Webkit 的渲染引擎 WebCore,而 Webkit 引擎的 Javascript 引擎 JSCore 則是 KJS 的分支。而chrome 則搭載了自己的 Javascript 引擎 V8。引用 各主流瀏覽器內核介紹 里的一段話:

我們上面提到 Chrome 是基于 WebKit 的分支,而 WebKit 又由渲染引擎 “WebCore” 和 JS 解釋引擎 “JSCore” 組成,可能會讓你搞不清 V8 和 JSCore 的關系。你可以這樣理解—— WebKit 是一塊主板,JSCore 是一塊可拆卸的內存條,谷歌實際上認為 Webkit 中的 JSCore 不夠好,才自己搞了一個 V8 JS 引擎,這就是 Chrome 比 Safari 在某些 JS 測試中效率更高的原因。

如果說 chromium 還不足以脫離 Webkit 的 “帽子”,Blink 的出現,代表著 chrome 將自主研發渲染引擎(Blink)以及 Javascript 引擎(V8)??梢云诖诓痪玫膶?,人們談起 chrome 想到的不是 Webkit 而是 Blink

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內容