內(nèi)核
首先得搞懂瀏覽器內(nèi)核指的是什么
瀏覽器內(nèi)核又可以分成兩部分:渲染引擎(layout engineer或者Rendering Engine)和JS引擎,它負責(zé)取得網(wǎng)頁的內(nèi)容(HTML摇邦、XML培漏、圖像等等)蘑辑、整理訊息(例如加入CSS等)骡显,以及計算網(wǎng)頁的顯示方式星爪,然后會輸出至顯示器或打印機浆西。瀏覽器的內(nèi)核的不同對于網(wǎng)頁的語法解釋會有不同,所以渲染的效果也不相同顽腾。
所有網(wǎng)頁瀏覽器近零、電子郵件客戶端以及其他需要編輯、顯示網(wǎng)絡(luò)內(nèi)容的應(yīng)用程序都需要內(nèi)核。JS引擎則是解析Javascript語言久信,執(zhí)行JavaScript語言來實現(xiàn)網(wǎng)頁的動態(tài)效果猪瞬。
最開始渲染引擎和JS引擎沒有區(qū)分的很明確,后來JS引擎越來越獨立入篮,內(nèi)核就傾向于只指渲染引擎陈瘦。有一個網(wǎng)頁標準計劃小組只做了一個ACID來測試引擎的兼容性和性能。內(nèi)核的種類很多潮售,如加上沒什么人使用的非商業(yè)的免費內(nèi)核痊项,可能會有10多種,段是常見的瀏覽器內(nèi)核可以分這四種:Trident酥诽、Gecko鞍泉、Blink、Webkit肮帐。
Trident
(['tra?d(?)nt])
Trident(IE內(nèi)核):該內(nèi)核程序在1997年的IE4中首次被采用咖驮,是微軟在Mosaic(馬賽克,這是人類歷史上第一個瀏覽器训枢,從此網(wǎng)頁可以在圖形界面的窗口瀏覽)代碼的基礎(chǔ)之上修改而來的托修,并沿用到IE11,也被普遍稱作“IE內(nèi)核”恒界。
Trident實際上是一款開放的內(nèi)核睦刃,其接口內(nèi)核設(shè)計的相當成熟,因此才有許多采用IE內(nèi)核而非IE的瀏覽器(殼瀏覽器)涌現(xiàn)十酣。由于IE本身的“壟斷性”(雖然名義上IE并非壟斷涩拙,但實際上,特別是從Windows95年代一直到XP初期耸采,就市場占有率來說IE的確借助Windows的東風(fēng)處于“壟斷”地位)而使得Trident內(nèi)核長期一家獨大兴泥,微軟很長時間都沒有更新Trident內(nèi)核,這導(dǎo)致了兩個后果——一是Trident內(nèi)核幾乎與W3C標準脫節(jié)(2005年)虾宇,二是Trident內(nèi)核的大量Bug等安全性問題沒有得到及時解決搓彻,然后加上一些致力于開源的開發(fā)者和一些學(xué)者們公開自己認為IE瀏覽器不安全的觀點,也有很多用戶轉(zhuǎn)向了其他瀏覽器文留,F(xiàn)irefox和Opera就是這個時候興起的好唯。非Trident內(nèi)核瀏覽器的市場占有率大幅提高也致使許多網(wǎng)頁開發(fā)人員開始注意網(wǎng)頁標準和非IE瀏覽器的瀏覽效果問題竭沫。
補充:IE從版本11開始燥翅,逐步支持WebGL技術(shù)。IE8的JavaScript引擎是Script蜕提,IE9開始用Chakra森书,這兩個版本區(qū)別很大,Chakra無論是速度和標準化方面都很出色。
國內(nèi)很多的雙核瀏覽器的其中一核便是Trident凛膏,美其名曰“兼容模式”杨名。
Windows10發(fā)布后,IE將其內(nèi)置瀏覽器命名為Edge猖毫,Edge最顯著的特點就是新內(nèi)核EdgeHTML台谍。關(guān)于Edge瀏覽器更多可以參考:https://www.zhihu.com/question/29985708
Gecko
(['gek??])
Gecko(Firefox 內(nèi)核):Netscape 6 開始采用的內(nèi)核,后來的Mozilla Firefox (火狐瀏覽器)也采用了該內(nèi)核吁断,Gecko的特點是代碼完全公開趁蕊,因此,其可開發(fā)程度很高仔役,全世界的程序員都可以為其編寫代碼掷伙,增加功能。因為這是個開源內(nèi)核又兵,因此受到許多人的青睞任柜,Gecko 內(nèi)核的瀏覽器也很多,這也是Gecko 內(nèi)核雖然年輕但市場占有率能夠迅速提高的重要原因沛厨。
事實上宙地,Gecko引擎的由來跟IE不無關(guān)系,前面說過IE沒有使用W3C的標準逆皮,這導(dǎo)致微軟內(nèi)部一些開發(fā)人員的不滿绸栅;他們與當時已經(jīng)停止更新了的Netscape 的一些員工一起創(chuàng)辦了 Mozilla,以當時的Mosaic 內(nèi)核為基礎(chǔ)重新編寫內(nèi)核页屠,于是開發(fā)出了Gecko粹胯。不過事實上,Gecko內(nèi)核的瀏覽器仍然還是Firefox(火狐)用戶最多辰企,所以有時也會被稱為Firefox內(nèi)核风纠。此外Gecko也是一個跨平臺內(nèi)核,可以在Windows牢贸、BSD竹观、Linux和Mac OS X 中使用。
WebKit
一提到webkit潜索,首先想到的便是 Chrome臭增,可以說,Chrome 將WebKit內(nèi)核深入人心竹习,殊不知誊抛,WebKit的鼻祖其實是 Safari。現(xiàn)在很多人錯誤的把 WebKit 叫做 Chrome 內(nèi)核(即使 Chrome 內(nèi)核已經(jīng)是Blink了)整陌,蘋果都哭瞎了有木有拗窃。
*Safari 是蘋果公司開發(fā)的瀏覽器瞎领,使用的KDE(Linux桌面系統(tǒng))的 KHTML 作為瀏覽器的內(nèi)核,Safari所用瀏覽器內(nèi)核的名稱是大名鼎鼎的 WebKit随夸。Safari 在2003年1月7日首度發(fā)行測試版九默,并成為 Mac OS X v10.3 與之后版本的默認瀏覽器,也成為蘋果其他系列產(chǎn)品的指定瀏覽器(也已支持 Windows 平臺)宾毒。
如上述可知驼修,WebKit 前身是KDE小組的KHTML引擎,可以說WebKit是KHTML的一個開源的分支诈铛。當年蘋果在比較了Gecko和KHTML后邪锌,選擇了后者來做引擎開發(fā),是因為KHTML擁有清晰的源碼結(jié)構(gòu)和極快的渲染速度癌瘾。
WebKit內(nèi)核可以說是以硬件盈利為主的蘋果公司給軟件行業(yè)的最大貢獻之一觅丰。隨后,2008年谷歌公司發(fā)布Chrome 瀏覽器妨退,采用chromium內(nèi)核便fork 了WebKit妇萄。
Chromium/Bink
2008年,谷歌公司發(fā)布了 Chrome 瀏覽器咬荷,瀏覽器使用的內(nèi)核被命名為Chromium冠句。
Chromium fork 來自開源引擎 WebKit ,卻把 WebKit 的代碼梳理的可讀性提高很多幸乒,所以以前可能需要一天進行編譯的代碼懦底,現(xiàn)在只要兩個小時就能搞定。因此 Chromium 引擎和其他基于 WebKit 的引擎渲染頁面的效果也是有出入的罕扎。所以有些地方會把Chromium 引擎和 WebKit 區(qū)分開來單獨介紹聚唐,而有文章把Chromium 歸入 WebKit 引擎中,都是有一定道理的腔召。
谷歌公司開研發(fā)了自己的JavaScript 引擎V8杆查,極大地提高了 JavaScript 的運算速度。
Chromium問世后臀蛛,帶動了國產(chǎn)瀏覽器行業(yè)的發(fā)展亲桦。一些基于Chromium 的單核、雙核瀏覽器如雨后春筍般拔地而起浊仆,例如:搜狗客峭、360、QQ瀏覽器等等抡柿,無一不是套著不同的外殼用著相同的內(nèi)核舔琅。
然而在2013年4月3日,谷歌在 Chromium Blog 上發(fā)表博客沙绝,稱將與蘋果的開源瀏覽器核心 WebKit 分道揚鑣搏明,在 Chromium 項目中研發(fā)的 Blink 渲染引擎(即瀏覽器核心)鼠锈,內(nèi)置于Chrome 瀏覽器之中闪檬。
WebKit用的好好的星著,為何要投入到一個新的內(nèi)核中去呢?
Blink其實是WebKit 的分支粗悯,如同 WebKit 是 KHTML 的分支虚循。 Google 的Chromium 項目此前一直使用 WebKit (WebCore)作為渲染引擎,但出于某種原因样傍,并沒有將其多進程架構(gòu)移植入 WebKit横缔。
后來,由于蘋果推出的 WebKit2 與 Chromium 的沙箱設(shè)計存在沖突衫哥,所以 Chromium 一直停留在 WebKit 茎刚,并使用移植的方式來實現(xiàn)和主線 WebKit2 的對接。這增加了 Chromium 的復(fù)雜性撤逢,且在一定程度上影響了 Chromium 的架構(gòu)移植工作膛锭。
基于以上原因,Google 決定從 WebKit 衍生出自己的 Blink 引擎(后由 Google 和Opera Software 共同研發(fā))蚊荣,將在 WebKit 代碼的基礎(chǔ)上研發(fā)更加快速和簡約的渲染引擎初狰,并逐步脫離 WebKit 的影響,創(chuàng)造一個完全獨立的 Blink 引擎互例。這樣一來奢入,唯一一條維系 Google 和蘋果之間技術(shù)關(guān)系的紐帶就這樣被切斷了。
Google 和蘋果在多個領(lǐng)域都是競爭對手媳叨,而唯獨在瀏覽器引擎上有技術(shù)合作腥光,利益一致。但為了各自的利益糊秆,誰都不會拿出100%的“誠意”來做好 WebKit 柴我,因為你做出來成果競爭對手可以直接享用。移動互聯(lián)網(wǎng)已經(jīng)崛起扩然,手機和平板設(shè)備端必將成為瀏覽器的另一個戰(zhàn)場艘儒。這個時候,如果 Google 跟蘋果仍然黏在一起夫偶,將會嚴重阻礙雙方的進步界睁,也會阻礙 WebKit 的進步。
據(jù)說 Blink 刪除了880W 行 WebKit 代碼兵拢。
至于為什么叫 Blink翻斟,有興趣的可以看下這篇訪談http://alistapart.com/blog/post/paul-irish-on-chrome-moving-to-blink
Blink 問世后,國產(chǎn)各種 Chrome 系的瀏覽器也紛紛投入 Blink 的懷抱说铃,可以在瀏覽器地址欄輸入Chrome://version進行查看访惜。
Presto
(['prest??])
Presto 是挪威產(chǎn)瀏覽器 Opera 的“前任”內(nèi)核嘹履,之所以稱之為“前任”,因為最新的Opera 瀏覽器早已將之拋棄而投入到了谷歌大本營债热。
Opera 的一個里程碑作品是 Opera 7.0 砾嫉,因為它使用了 Opera Software 自主開發(fā)的 Presto 渲染引擎。取代了舊版 Opera 4至6 版本使用的 Elektra 排版引擎窒篱。該款引擎的特點就是渲染速度的優(yōu)化達到了極致焕刮,然而代價是犧牲了網(wǎng)頁的兼容性。
Presto 加入了動態(tài)功能墙杯,例如網(wǎng)頁或其部分可隨著 DOM 及 Script 語法的事件而重新排版配并。 Presto 在推出后不斷有更新的版本推出,使不少錯誤得以修正高镐,以及閱讀 JavaScript 效能得以最佳化溉旋,并成為當時速度最快的引擎。
然而為了減少研發(fā)成本嫉髓, Opera 在2013 年2 月宣布放棄 Presto 观腊,轉(zhuǎn)而跟隨 Chrome 使用 WebKit 分支的 Chromium 引擎作為自家瀏覽器核心引擎, Presto 內(nèi)核的 Opera 瀏覽器版本永遠停留在了 12.17 岩喷。在Chrome 于2013年推出Blink 引擎之后恕沫, Opera 也緊跟其腳步表示將轉(zhuǎn)而使用 Blink 作為瀏覽器核心引擎。
Presto 與開源的 WebKit 和經(jīng)過谷歌加持的 Chromium 系列相比毫無推廣上的優(yōu)勢纱意,這是 Opera 轉(zhuǎn)投 WebKit 的主要原因婶溯,并且使用 WebKit 內(nèi)核的Opera 瀏覽器可以兼容谷歌 Chrome 瀏覽器海量的插件資源。但是換內(nèi)核的代價對于 Opera 來說過于慘痛偷霉。使用谷歌的 WebKit 內(nèi)核之后迄委,原本快速,輕量化类少,穩(wěn)定的 Opera 瀏覽器變得異常的卡頓叙身,而且表現(xiàn)不穩(wěn)定, Opera 原本舊內(nèi)核瀏覽器書簽同步到新內(nèi)核上的工作 Opera 花了整整兩年時間硫狞,期間很多 Opera 的用戶紛紛轉(zhuǎn)投谷歌瀏覽器和其他瀏覽器信轿,造成了眾多的用戶流失。時至今日還有上千萬人在使用老版本的 Opera残吩。
很多人都認為 Opera 瀏覽器終止在了 12.17 财忽,伺候所更新的 Opera版本號不再是原來那個 Opera 。
說好的Presto Forever 呢泣侮?
關(guān)于移動端
移動端的瀏覽器內(nèi)核主要說的是系統(tǒng)內(nèi)置瀏覽器的內(nèi)核即彪。
目前移動設(shè)備瀏覽器上常用的內(nèi)核有 WebKit、Blink活尊、Trident隶校、Gecko等漏益。
iPhone、ipad 等蘋果IOS平臺主要是 WebKit
Android 4.4 之前的Android 系統(tǒng)瀏覽器內(nèi)核是 WebKit
Android 4.4 系統(tǒng)瀏覽器切換到了Chromium 深胳,內(nèi)核是 WebKit 的分支 Blink
Windows Phone 8 系統(tǒng)瀏覽器內(nèi)核是 Trident
總結(jié)
瀏覽器內(nèi)核主要指的是瀏覽器的渲染引擎绰疤,2013年以前,代表有 Trident(IE)稠屠、Gecko(Firefox)峦睡、WebKit (Safari Chrome 等)以及 Presto (Opera)翎苫。2013年权埠,谷歌開始研發(fā) Blink 引擎, Chrome 28 以后開始使用煎谍,而 Opera 則放棄了自主研發(fā)的 Presto 引擎攘蔽,投入谷歌懷抱,和谷歌一起研發(fā) Blink 引擎呐粘,國內(nèi)各種 Chrome 系的瀏覽器也紛紛放棄 WebKit满俗,紛紛投入Blink 的懷抱。
還有一點文章里沒有說的很明白作岖,就是WebKit 其實是KHTML的分支唆垃,這里的 KHTML指渲染引擎,WebKit 其實就泛指了 WebKit 的渲染引擎 WebCore 痘儡,而 WebKit 引擎的 JavaScript 引擎 JSCore 則是KJS 的分支辕万。而 Chrome 則搭載了自己的 JavaScript 引擎 V8。
如果說chromium 還不足以脫離WebKit 的帽子沉删,Blink 的出現(xiàn)渐尿,代表著 Chrome 將自主研發(fā)渲染引擎 (Blink)以及JavaScript 引擎(V8)》澹可以期待在不久的將來砖茸,人們談起 Chrome 想到的不是 WebKit,二是 Blink殴穴。