內(nèi)核
首先得搞懂瀏覽器內(nèi)核究竟指的是什么砰苍。
瀏覽器內(nèi)核又可以分成兩部分:渲染引擎(layout engineer 或者 Rendering Engine)和 JS 引擎铣墨。它負(fù)責(zé)取得網(wǎng)頁的內(nèi)容(HTML味混、XML、圖像等等)、整理訊息(例如加入 CSS 等)并级,以及計(jì)算網(wǎng)頁的顯示方式庵朝,然后會(huì)輸出至顯示器或打印機(jī)吗冤。瀏覽器的內(nèi)核的不同對(duì)于網(wǎng)頁的語法解釋會(huì)有不同,所以渲染的效果也不相同九府。所有網(wǎng)頁瀏覽器椎瘟、電子郵件客戶端以及其它需要編輯、顯示網(wǎng)絡(luò)內(nèi)容的應(yīng)用程序都需要內(nèi)核侄旬。JS 引擎則是解析 Javascript 語言肺蔚,執(zhí)行 javascript 語言來實(shí)現(xiàn)網(wǎng)頁的動(dòng)態(tài)效果。
最開始渲染引擎和 JS 引擎并沒有區(qū)分的很明確儡羔,后來 JS 引擎越來越獨(dú)立宣羊,內(nèi)核就傾向于只指渲染引擎。有一個(gè)網(wǎng)頁標(biāo)準(zhǔn)計(jì)劃小組制作了一個(gè) ACID 來測試引擎的兼容性和性能汰蜘。內(nèi)核的種類很多仇冯,如加上沒什么人使用的非商業(yè)的免費(fèi)內(nèi)核,可能會(huì)有 10 多種族操,但是常見的瀏覽器內(nèi)核可以分這四種:Trident苛坚、Gecko、Blink、Webkit泼舱。
Trident (['tra?d(?)nt])
Trident(IE內(nèi)核):該內(nèi)核程序在 1997 年的 IE4 中首次被采用等缀,是微軟在 Mosaic(”馬賽克”,是互聯(lián)網(wǎng)歷史上第一個(gè)獲普遍使用和能夠顯示圖片的網(wǎng)頁瀏覽器柠掂,從此網(wǎng)頁可以在圖形界面的窗口瀏覽) 代碼的基礎(chǔ)之上修改而來的项滑,并沿用到 IE11,也被普遍稱作 “IE內(nèi)核”涯贞。
Trident實(shí)際上是一款開放的內(nèi)核枪狂,其接口內(nèi)核設(shè)計(jì)的相當(dāng)成熟,因此才有許多采用 IE 內(nèi)核而非 IE 的瀏覽器(殼瀏覽器)涌現(xiàn)宋渔。由于 IE 本身的 “壟斷性”(雖然名義上 IE 并非壟斷州疾,但實(shí)際上,特別是從 Windows 95 年代一直到 XP 初期皇拣,就市場占有率來說 IE 的確借助 Windows 的東風(fēng)處于 “壟斷” 的地位)而使得 Trident 內(nèi)核的長期一家獨(dú)大严蓖,微軟很長時(shí)間都并沒有更新 Trident 內(nèi)核,這導(dǎo)致了兩個(gè)后果——一是 Trident 內(nèi)核曾經(jīng)幾乎與 W3C 標(biāo)準(zhǔn)脫節(jié)(2005年)氧急,二是Trident 內(nèi)核的大量 Bug 等安全性問題沒有得到及時(shí)解決颗胡,然后加上一些致力于開源的開發(fā)者和一些學(xué)者們公開自己認(rèn)為 IE 瀏覽器不安全的觀點(diǎn),也有很多用戶轉(zhuǎn)向了其他瀏覽器吩坝,F(xiàn)irefox 和 Opera 就是這個(gè)時(shí)候興起的毒姨。非 Trident 內(nèi)核瀏覽器的市場占有率大幅提高也致使許多網(wǎng)頁開發(fā)人員開始注意網(wǎng)頁標(biāo)準(zhǔn)和非 IE瀏覽器的瀏覽效果問題。
補(bǔ)充:IE 從版本 11 開始钉寝,初步支持WebGL 技術(shù)弧呐。IE8 的 JavaScript 引擎是 Jscript,IE9 開始用Chakra嵌纲,這兩個(gè)版本區(qū)別很大俘枫,Chakra 無論是速度和標(biāo)準(zhǔn)化方面都很出色。
國內(nèi)很多的雙核瀏覽器的其中一核便是 Trident逮走。
Window10 發(fā)布后鸠蚪,IE 將其內(nèi)置瀏覽器命名為 Edge,Edge 最顯著的特點(diǎn)就是新內(nèi)核 EdgeHTML言沐。
Gecko (['gek??])
Gecko(Firefox 內(nèi)核):Netscape6 開始采用的內(nèi)核邓嘹,后來的 Mozilla FireFox(火狐瀏覽器) 也采用了該內(nèi)核,Gecko 的特點(diǎn)是代碼完全公開险胰,因此汹押,其可開發(fā)程度很高,全世界的程序員都可以為其編寫代碼起便,增加功能棚贾。因?yàn)檫@是個(gè)開源內(nèi)核窖维,因此受到許多人的青睞,Gecko 內(nèi)核的瀏覽器也很多妙痹,這也是 Gecko 內(nèi)核雖然年輕但市場占有率能夠迅速提高的重要原因铸史。
事實(shí)上,Gecko 引擎的由來跟 IE 不無關(guān)系怯伊,前面說過 IE 沒有使用 W3C 的標(biāo)準(zhǔn)琳轿,這導(dǎo)致了微軟內(nèi)部一些開發(fā)人員的不滿;他們與當(dāng)時(shí)已經(jīng)停止更新了的 Netscape 的一些員工一起創(chuàng)辦了 Mozilla耿芹,以當(dāng)時(shí)的 Mosaic 內(nèi)核為基礎(chǔ)重新編寫內(nèi)核崭篡,于是開發(fā)出了 Gecko。不過事實(shí)上吧秕,Gecko 內(nèi)核的瀏覽器仍然還是 Firefox (火狐) 用戶最多琉闪,所以有時(shí)也會(huì)被稱為 Firefox 內(nèi)核。此外 Gecko 也是一個(gè)跨平臺(tái)內(nèi)核砸彬,可以在Windows颠毙、 BSD、Linux 和 Mac OS X 中使用砂碉。
Webkit
一提到 webkit蛀蜜,首先想到的便是 chrome,可以說增蹭,chrome 將 Webkit內(nèi)核 深入人心涵防,殊不知,Webkit 的鼻祖其實(shí)是 Safari』γ現(xiàn)在很多人錯(cuò)誤地把 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 與之后版本的默認(rèn)瀏覽器,也成為蘋果其它系列產(chǎn)品的指定瀏覽器(也已支持 Windows 平臺(tái))盒至。
如上述可知缺谴,WebKit 前身是 KDE 小組的KHTML 引擎,可以說 WebKit 是 KHTML 的一個(gè)開源的分支女责。當(dāng)年蘋果在比較了 Gecko 和 KHTML 后漆枚,選擇了后者來做引擎開發(fā),是因?yàn)?KHTML 擁有清晰的源碼結(jié)構(gòu)和極快的渲染速度抵知。
Webkit內(nèi)核 可以說是以硬件盈利為主的蘋果公司給軟件行業(yè)的最大貢獻(xiàn)之一墙基。隨后软族,2008 年谷歌公司發(fā)布 chrome 瀏覽器,采用的 chromium 內(nèi)核便 fork 了Webkit残制。
Chromium/Bink
2008 年立砸,谷歌公司發(fā)布了 chrome 瀏覽器,瀏覽器使用的內(nèi)核被命名為 chromium初茶。
chromium fork 自開源引擎 webkit颗祝,卻把 WebKit 的代碼梳理得可讀性提高很多,所以以前可能需要一天進(jìn)行編譯的代碼恼布,現(xiàn)在只要兩個(gè)小時(shí)就能搞定螺戳。因此 Chromium 引擎和其它基于 WebKit 的引擎所渲染頁面的效果也是有出入的。所以有些地方會(huì)把 chromium 引擎和 webkit 區(qū)分開來單獨(dú)介紹桥氏,而有的文章把 chromium 歸入 webkit 引擎中温峭,都是有一定道理的。
谷歌公司還研發(fā)了自己的 Javascript 引擎字支,V8凤藏,極大地提高了 Javascript 的運(yùn)算速度。
chromium 問世后堕伪,帶動(dòng)了國產(chǎn)瀏覽器行業(yè)的發(fā)展揖庄。一些基于 chromium 的單核,雙核瀏覽器如雨后春筍般拔地而起欠雌,例如 搜狗蹄梢、360、QQ瀏覽器等等富俄,無一不是套著不同的外殼用著相同的內(nèi)核禁炒。
然而 2013 年 4 月 3 日,谷歌在 Chromium Blog 上發(fā)表 博客霍比,稱將與蘋果的開源瀏覽器核心 Webkit 分道揚(yáng)鑣幕袱,在 Chromium 項(xiàng)目中研發(fā) Blink 渲染引擎(即瀏覽器核心),內(nèi)置于 Chrome 瀏覽器之中悠瞬。
webkit 用的好好的们豌,為何要投入到一個(gè)新的內(nèi)核中去呢?
Blink 其實(shí)是 WebKit 的分支浅妆,如同 WebKit 是 KHTML 的分支望迎。Google 的Chromium 項(xiàng)目此前一直使用 WebKit(WebCore) 作為渲染引擎,但出于某種原因凌外,并沒有將其多進(jìn)程架構(gòu)移植入Webkit辩尊。
后來,由于蘋果推出的 WebKit2 與 Chromium 的沙箱設(shè)計(jì)存在沖突康辑,所以 Chromium 一直停留在 WebKit对省,并使用移植的方式來實(shí)現(xiàn)和主線 WebKit2 的對(duì)接蝗拿。這增加了 Chromium 的復(fù)雜性,且在一定程度上影響了 Chromium 的架構(gòu)移植工作蒿涎。
基于以上原因哀托,Google 決定從 WebKit 衍生出自己的 Blink 引擎(后由 Google 和 Opera Software 共同研發(fā)),將在 WebKit 代碼的基礎(chǔ)上研發(fā)更加快速和簡約的渲染引擎劳秋,并逐步脫離 WebKit 的影響仓手,創(chuàng)造一個(gè)完全獨(dú)立的 Blink 引擎。這樣以來玻淑,唯一一條維系 Google 和蘋果之間技術(shù)關(guān)系的紐帶就這樣被切斷了嗽冒。
Google 和蘋果在多個(gè)領(lǐng)域都是競爭對(duì)手,而唯獨(dú)在瀏覽器引擎上有技術(shù)合作补履,利益一致添坊。但為了各自的利益,誰都不會(huì)拿出 100% 的 “誠意” 來做好 WebKit箫锤,因?yàn)槟阕龀鰜淼某晒偁帉?duì)手可以直接享用贬蛙。移動(dòng)互聯(lián)網(wǎng)已經(jīng)崛起,手機(jī)和平板設(shè)備端必將成為瀏覽器的另一個(gè)戰(zhàn)場谚攒。這個(gè)時(shí)候阳准,如果 Google 跟蘋果仍然黏在一起,將會(huì)嚴(yán)重阻礙雙方的進(jìn)步馏臭,也會(huì)阻礙 WebKit 的進(jìn)步野蝇。
據(jù)說 Blink 刪除了 880w 行webkit 代碼。
Presto (['prest??])
Presto 是挪威產(chǎn)瀏覽器 opera 的 “前任” 內(nèi)核括儒,為何說是 “前任”绕沈,因?yàn)樽钚碌?opera 瀏覽器早已將之拋棄從而投入到了谷歌大本營。
Opera 的一個(gè)里程碑作品是 Opera7.0帮寻,因?yàn)樗褂昧?Opera Software 自主開發(fā)的 Presto 渲染引擎七冲,取代了舊版 Opera 4 至 6 版本使用的 Elektra 排版引擎。該款引擎的特點(diǎn)就是渲染速度的優(yōu)化達(dá)到了極致规婆,然而代價(jià)是犧牲了網(wǎng)頁的兼容性。
Presto 加入了動(dòng)態(tài)功能蝉稳,例如網(wǎng)頁或其部分可隨著 DOM 及 Script 語法的事件而重新排版抒蚜。Presto 在推出后不斷有更新版本推出,使不少錯(cuò)誤得以修正耘戚,以及閱讀Javascript 效能得以最佳化嗡髓,并成為當(dāng)時(shí)速度最快的引擎。
然而為了減少研發(fā)成本收津,Opera 在 2013 年 2 月宣布放棄 Presto饿这,轉(zhuǎn)而跟隨 Chrome 使用 WebKit 分支的 Chromium 引擎作為自家瀏覽器核心引擎浊伙,Presto 內(nèi)核的 Opera 瀏覽器版本永遠(yuǎn)的停留在了 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)核的代價(jià)對(duì)于 Opera 來說過于慘痛。使用谷歌的WebKit 內(nèi)核之后肌割,原本快速卧蜓,輕量化,穩(wěn)定的 Opera 瀏覽器變得異常的卡頓把敞,而且表現(xiàn)不穩(wěn)定弥奸,Opera 原本舊內(nèi)核瀏覽器書簽同步到新內(nèi)核上的工作 Opera 花了整整兩年時(shí)間,期間很多 Opera 的用戶紛紛轉(zhuǎn)投谷歌瀏覽器和其他瀏覽器奋早,造成了眾多的用戶流失盛霎。時(shí)至今日現(xiàn)在還有上千萬人在使用老版本的 Opera。
很多人都認(rèn)為 Opera 瀏覽器終止在了 12.17伸蚯,此后所更新的 Opera 版本號(hào)不再是原來那個(gè) Opera摩渺。
關(guān)于移動(dòng)端
移動(dòng)端的瀏覽器內(nèi)核主要說的是系統(tǒng)內(nèi)置瀏覽器的內(nèi)核。
目前移動(dòng)設(shè)備瀏覽器上常用的內(nèi)核有 Webkit剂邮,Blink摇幻,Trident,Gecko 等挥萌,其中 iPhone 和
總結(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系的瀏覽器(360掸宛、UC死陆、QQ、2345 等等)也紛紛放棄 webkit唧瘾,投入 blink 的懷抱措译。
還有一點(diǎn)文章里沒有說的很明白别凤,就是 Webkit 其實(shí)是 KHTML 的分支,這里的 KHTML 指渲染引擎领虹,Webkit 其實(shí)就泛指了 Webkit 的渲染引擎 WebCore规哪,而 Webkit 引擎的 Javascript 引擎 JSCore 則是 KJS 的分支。而chrome 則搭載了自己的 Javascript 引擎 V8掠械。引用 各主流瀏覽器內(nèi)核介紹 里的一段話:
我們上面提到 Chrome 是基于 WebKit 的分支由缆,而 WebKit 又由渲染引擎 “WebCore” 和 JS 解釋引擎 “JSCore” 組成,可能會(huì)讓你搞不清 V8 和 JSCore 的關(guān)系猾蒂。你可以這樣理解—— WebKit 是一塊主板均唉,JSCore 是一塊可拆卸的內(nèi)存條,谷歌實(shí)際上認(rèn)為 Webkit 中的 JSCore 不夠好肚菠,才自己搞了一個(gè) V8 JS 引擎舔箭,這就是 Chrome 比 Safari 在某些 JS 測試中效率更高的原因。
如果說 chromium 還不足以脫離 Webkit 的 “帽子”蚊逢,Blink 的出現(xiàn)层扶,代表著 chrome 將自主研發(fā)渲染引擎(Blink)以及 Javascript 引擎(V8)±雍桑可以期待在不久的將來镜会,人們談起 chrome 想到的不是 Webkit 而是 Blink