
只是用戶看到僅僅只是瀏覽器本身,卻很少能看到瀏覽器最核心的部分—瀏覽器內(nèi)核。從第一款libwww(Library WorldWideWeb)瀏覽器發(fā)展至今已經(jīng)經(jīng)歷了無(wú)數(shù)競(jìng)爭(zhēng)與淘汰了?,F(xiàn)在國(guó)內(nèi)常見(jiàn)的瀏覽器有:IE、Firefox、QQ瀏覽器、Safari、Opera、Google Chrome、百度瀏覽器、搜狗瀏覽器、獵豹瀏覽器、360瀏覽器、UC瀏覽器、遨游瀏覽器、世界之窗瀏覽器等。但目前最為主流瀏覽器有五大款,分別是IE、Firefox、Google Chrome、Safari、Opera。
瀏覽器最重要的部分是瀏覽器的內(nèi)核。瀏覽器內(nèi)核是瀏覽器的核心,也稱“渲染引擎”,用來(lái)解釋網(wǎng)頁(yè)語(yǔ)法并渲染到網(wǎng)頁(yè)上。瀏覽器內(nèi)核決定了瀏覽器該如何顯示網(wǎng)頁(yè)內(nèi)容以及頁(yè)面的格式信息。不同的瀏覽器內(nèi)核對(duì)網(wǎng)頁(yè)的語(yǔ)法解釋也不同,因此網(wǎng)頁(yè)開(kāi)發(fā)者需要在不同內(nèi)核的瀏覽器中測(cè)試網(wǎng)頁(yè)的渲染效果。
瀏覽器內(nèi)核又可以分成兩部分:渲染引擎(layout engineer 或者 Rendering Engine)和 JS 引擎。它負(fù)責(zé)取得網(wǎng)頁(yè)的內(nèi)容(HTML、XML、圖像等等)、整理訊息(例如加入 CSS 等),以及計(jì)算網(wǎng)頁(yè)的顯示方式,然后會(huì)輸出至顯示器或打印機(jī)。瀏覽器的內(nèi)核的不同對(duì)于網(wǎng)頁(yè)的語(yǔ)法解釋會(huì)有不同,所以渲染的效果也不相同。所有網(wǎng)頁(yè)瀏覽器、電子郵件客戶端以及其它需要編輯、顯示網(wǎng)絡(luò)內(nèi)容的應(yīng)用程序都需要內(nèi)核。JS 引擎則是解析 Javascript 語(yǔ)言,執(zhí)行 javascript 語(yǔ)言來(lái)實(shí)現(xiàn)網(wǎng)頁(yè)的動(dòng)態(tài)效果。
最開(kāi)始渲染引擎和 JS 引擎并沒(méi)有區(qū)分的很明確,后來(lái) JS 引擎越來(lái)越獨(dú)立,內(nèi)核就傾向于只指渲染引擎。有一個(gè)網(wǎng)頁(yè)標(biāo)準(zhǔn)計(jì)劃小組制作了一個(gè) ACID 來(lái)測(cè)試引擎的兼容性和性能。內(nèi)核的種類很多,如加上沒(méi)什么人使用的非商業(yè)的免費(fèi)內(nèi)核,可能會(huì)有 10 多種,但是常見(jiàn)的瀏覽器內(nèi)核可以分這四種:Trident、Gecko、Blink、Webkit。
1、IE瀏覽器:
IE是微軟公司旗下瀏覽器,是目國(guó)內(nèi)用戶量最多的瀏覽器。IE誕生于1994年,當(dāng)時(shí)微軟為了對(duì)抗市場(chǎng)份額占據(jù)將近百分之九十的網(wǎng)景Netscape Navigator,于是在Windows中開(kāi)發(fā)了自己的瀏覽器Internet Explorer,自此也引發(fā)了第一次瀏覽器大戰(zhàn)。結(jié)果可想而知,微軟大獲全勝,網(wǎng)景不得不將自己賣給AOL公司。但實(shí)際上事情并沒(méi)有結(jié)束,網(wǎng)景后來(lái)開(kāi)發(fā)了風(fēng)靡一時(shí)的Firefox火狐,至今Firefox也成為世界五大瀏覽器之一。
1996年,微軟從Spyglass手里拿到Spyglass Mosaic的源代碼和授權(quán),開(kāi)始開(kāi)發(fā)自己的瀏覽器IE。后來(lái),微軟以IE和Windows捆綁的模式不斷向市場(chǎng)擴(kuò)展份額,使IE成為市場(chǎng)的絕對(duì)主流?,F(xiàn)在裝了Windows系統(tǒng)的電腦基本無(wú)法卸載IE。
2、Opera瀏覽器:
Opera是挪威Opera Software ASA公司旗下的瀏覽器。1995年,opera公司發(fā)布第一版Opera瀏覽器,使用自己研發(fā)的Presto內(nèi)核。當(dāng)時(shí)opera公司的開(kāi)發(fā)團(tuán)隊(duì)不斷完善Presto內(nèi)核,使Opera瀏覽器一度成為頂級(jí)瀏覽器。直到2016年奇虎360和昆侖萬(wàn)維收購(gòu)了Oprea瀏覽器,從此也丟棄了強(qiáng)大的Presto內(nèi)核,改用當(dāng)時(shí)Google開(kāi)源的webkit內(nèi)核。后來(lái)Opera瀏覽器跟隨Google將瀏覽器內(nèi)核改為Blink內(nèi)核。自此Presto內(nèi)核也淡出了互聯(lián)網(wǎng)市場(chǎng)。
3、Safari瀏覽器:
第二次瀏覽器大戰(zhàn)是從蘋果公司發(fā)布Safari瀏覽器開(kāi)始的。2003年,蘋果公司在蘋果手機(jī)上開(kāi)發(fā)Safari瀏覽器,利用自己得天獨(dú)厚的手機(jī)市場(chǎng)份額使Safari瀏覽器迅速成為世界主流瀏覽器。Safari是最早使用webkit內(nèi)核的瀏覽器也是現(xiàn)在蘋果默認(rèn)的瀏覽器。
4、Firefox瀏覽器:
Firefox瀏覽器使Mozilla公司旗下瀏覽器,也是剛才提到的網(wǎng)景公司后來(lái)的瀏覽器。網(wǎng)景被收購(gòu)后,網(wǎng)景人員創(chuàng)辦了Mozilla基金會(huì),這是一個(gè)非盈利組織,他們?cè)?004年推出自己的瀏覽器Firefox。Firefox采用Gecko作為內(nèi)核。Gecko是一個(gè)開(kāi)源的項(xiàng)目,代碼完全公開(kāi),因此受到很多人的青睞。Firefox的問(wèn)世加快了第二次瀏覽器大戰(zhàn)的開(kāi)始。第二次瀏覽器大戰(zhàn)與第一次二元鼎力的局面不同,這一次的特點(diǎn)就是百家爭(zhēng)鳴,也自此打破了IE瀏覽器從98年網(wǎng)景被收購(gòu)后獨(dú)步瀏覽器市場(chǎng)的局面。
5、Chrome瀏覽器:
Chrome瀏覽器是google旗下的瀏覽器。Chrome瀏覽器至發(fā)布以來(lái)一直講究簡(jiǎn)潔、快速、安全,所以Chrome瀏覽器到現(xiàn)在一直受人追捧。最開(kāi)始Chrome采用webkit作為瀏覽器內(nèi)核,直到2013年,google宣布不再使用蘋果的webkit內(nèi)核,開(kāi)始使用webkit的分支內(nèi)核Blink。
以上是五大瀏覽器的簡(jiǎn)介,接下來(lái)是四大內(nèi)核。在介紹五大瀏覽器的同時(shí)也已經(jīng)順便介紹了四大內(nèi)核。四大內(nèi)核分別是:Trident(也稱IE內(nèi)核)、webkit、Blink、Gecko。五大瀏覽器采用的都是單內(nèi)核,而隨著瀏覽器的發(fā)展現(xiàn)在也出現(xiàn)了雙內(nèi)核。像360瀏覽器、QQ瀏覽器都是采用雙內(nèi)核。
作為前端開(kāi)發(fā),熟悉四大內(nèi)核是非常有必要的。四大內(nèi)核的解析不同使網(wǎng)頁(yè)渲染效果更具多樣化。下面總結(jié)一下各常用瀏覽器所使用的內(nèi)核。
1、IE瀏覽器內(nèi)核:Trident內(nèi)核,也是俗稱的IE內(nèi)核;
2、Chrome瀏覽器內(nèi)核:統(tǒng)稱為Chromium內(nèi)核或Chrome內(nèi)核,以前是Webkit內(nèi)核,現(xiàn)在是Blink內(nèi)核;
3、Firefox瀏覽器內(nèi)核:Gecko內(nèi)核,俗稱Firefox內(nèi)核;
4、Safari瀏覽器內(nèi)核:Webkit內(nèi)核;
5、Opera瀏覽器內(nèi)核:最初是自己的Presto內(nèi)核,后來(lái)是Webkit,現(xiàn)在是Blink內(nèi)核;
6、360瀏覽器、獵豹瀏覽器內(nèi)核:IE+Chrome雙內(nèi)核;
7、搜狗、遨游、QQ瀏覽器內(nèi)核:Trident(兼容模式)+Webkit(高速模式);
8、百度瀏覽器、世界之窗內(nèi)核:IE內(nèi)核;
9、2345瀏覽器內(nèi)核:以前是IE內(nèi)核,現(xiàn)在也是IE+Chrome雙內(nèi)核;
Trident (['tra?d(?)nt])
Trident(IE內(nèi)核):該內(nèi)核程序在 1997 年的 IE4 中首次被采用,是微軟在 Mosaic("馬賽克",這是人類歷史上第一個(gè)瀏覽器,從此網(wǎng)頁(yè)可以在圖形界面的窗口瀏覽) 代碼的基礎(chǔ)之上修改而來(lái)的,并沿用到 IE11,也被普遍稱作 "IE內(nèi)核"。
Trident實(shí)際上是一款開(kāi)放的內(nèi)核,其接口內(nèi)核設(shè)計(jì)的相當(dāng)成熟,因此才有許多采用 IE 內(nèi)核而非 IE 的瀏覽器(殼瀏覽器)涌現(xiàn)。由于 IE 本身的 "壟斷性"(雖然名義上 IE 并非壟斷,但實(shí)際上,特別是從 Windows 95 年代一直到 XP 初期,就市場(chǎng)占有率來(lái)說(shuō) IE 的確借助 Windows 的東風(fēng)處于 "壟斷" 的地位)而使得 Trident 內(nèi)核的長(zhǎng)期一家獨(dú)大,微軟很長(zhǎng)時(shí)間都并沒(méi)有更新 Trident 內(nèi)核,這導(dǎo)致了兩個(gè)后果——一是 Trident 內(nèi)核曾經(jīng)幾乎與 W3C 標(biāo)準(zhǔn)脫節(jié)(2005年),二是 Trident 內(nèi)核的大量 Bug 等安全性問(wèn)題沒(méi)有得到及時(shí)解決,然后加上一些致力于開(kāi)源的開(kāi)發(fā)者和一些學(xué)者們公開(kāi)自己認(rèn)為 IE 瀏覽器不安全的觀點(diǎn),也有很多用戶轉(zhuǎn)向了其他瀏覽器,F(xiàn)irefox 和 Opera 就是這個(gè)時(shí)候興起的。非 Trident 內(nèi)核瀏覽器的市場(chǎng)占有率大幅提高也致使許多網(wǎng)頁(yè)開(kāi)發(fā)人員開(kāi)始注意網(wǎng)頁(yè)標(biāo)準(zhǔn)和非 IE瀏覽器的瀏覽效果問(wèn)題。
補(bǔ)充:IE 從版本 11 開(kāi)始,初步支持 WebGL 技術(shù)。IE8 的 JavaScript 引擎是 Jscript,IE9 開(kāi)始用 Chakra,這兩個(gè)版本區(qū)別很大,Chakra 無(wú)論是速度和標(biāo)準(zhǔn)化方面都很出色。
國(guó)內(nèi)很多的雙核瀏覽器的其中一核便是 Trident,美其名曰 "兼容模式"。
Window10 發(fā)布后,IE 將其內(nèi)置瀏覽器命名為 Edge,Edge 最顯著的特點(diǎn)就是新內(nèi)核 EdgeHTML。關(guān)于 Edge 瀏覽器更多可以參考 如何評(píng)價(jià) Microsoft Edge 瀏覽器? 以及 微軟開(kāi)源Edge的JS引擎ChakraCore
關(guān)于 IE 的歷史,推薦這篇文章 激蕩20年:IE瀏覽器的輝煌與落寞
Gecko (['gek??])
Gecko(Firefox 內(nèi)核):Netscape6 開(kāi)始采用的內(nèi)核,后來(lái)的 Mozilla FireFox(火狐瀏覽器) 也采用了該內(nèi)核,Gecko 的特點(diǎn)是代碼完全公開(kāi),因此,其可開(kāi)發(fā)程度很高,全世界的程序員都可以為其編寫代碼,增加功能。因?yàn)檫@是個(gè)開(kāi)源內(nèi)核,因此受到許多人的青睞,Gecko 內(nèi)核的瀏覽器也很多,這也是 Gecko 內(nèi)核雖然年輕但市場(chǎng)占有率能夠迅速提高的重要原因。
事實(shí)上,Gecko 引擎的由來(lái)跟 IE 不無(wú)關(guān)系,前面說(shuō)過(guò) IE 沒(méi)有使用 W3C 的標(biāo)準(zhǔn),這導(dǎo)致了微軟內(nèi)部一些開(kāi)發(fā)人員的不滿;他們與當(dāng)時(shí)已經(jīng)停止更新了的 Netscape 的一些員工一起創(chuàng)辦了 Mozilla,以當(dāng)時(shí)的 Mosaic 內(nèi)核為基礎(chǔ)重新編寫內(nèi)核,于是開(kāi)發(fā)出了 Gecko。不過(guò)事實(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,可以說(shuō),chrome 將 Webkit內(nèi)核 深入人心,殊不知,Webkit 的鼻祖其實(shí)是 Safari?,F(xiàn)在很多人錯(cuò)誤地把 webkit 叫做 chrome內(nèi)核(即使 chrome內(nèi)核已經(jīng)是 blink 了),蘋果都哭瞎了有木有。
Safari 是蘋果公司開(kāi)發(fā)的瀏覽器,使用了KDE(Linux桌面系統(tǒng))的 KHTML 作為瀏覽器的內(nèi)核,Safari 所用瀏覽器內(nèi)核的名稱是大名鼎鼎的 WebKit。 Safari 在 2003 年 1 月 7 日首度發(fā)行測(cè)試版,并成為 Mac OS X v10.3 與之后版本的默認(rèn)瀏覽器,也成為蘋果其它系列產(chǎn)品的指定瀏覽器(也已支持 Windows 平臺(tái))。
如上述可知,WebKit 前身是 KDE 小組的 KHTML 引擎,可以說(shuō) WebKit 是 KHTML 的一個(gè)開(kāi)源的分支。當(dāng)年蘋果在比較了 Gecko 和 KHTML 后,選擇了后者來(lái)做引擎開(kāi)發(fā),是因?yàn)?KHTML 擁有清晰的源碼結(jié)構(gòu)和極快的渲染速度。
Webkit內(nèi)核 可以說(shuō)是以硬件盈利為主的蘋果公司給軟件行業(yè)的最大貢獻(xiàn)之一。隨后,2008 年谷歌公司發(fā)布 chrome 瀏覽器,采用的 chromium 內(nèi)核便 fork 了 Webkit。
PS:Apple 在 Safari 里面使用了自己的 Nitro JavaScript 引擎(只用 WebKit 來(lái)渲染 HTML),所以一般說(shuō)到 Webkit,通常指的就是渲染引擎(而不包括 Javascript 引擎)
Chromium/Blink
2008 年,谷歌公司發(fā)布了 chrome 瀏覽器,瀏覽器使用的內(nèi)核被命名為 chromium。
chromium fork 自開(kāi)源引擎 webkit,卻把 WebKit 的代碼梳理得可讀性提高很多,所以以前可能需要一天進(jìn)行編譯的代碼,現(xiàn)在只要兩個(gè)小時(shí)就能搞定。因此 Chromium 引擎和其它基于 WebKit 的引擎所渲染頁(yè)面的效果也是有出入的。所以有些地方會(huì)把 chromium 引擎和 webkit 區(qū)分開(kāi)來(lái)單獨(dú)介紹,而有的文章把 chromium 歸入 webkit 引擎中,都是有一定道理的。
谷歌公司還研發(fā)了自己的 Javascript 引擎,V8,極大地提高了 Javascript 的運(yùn)算速度。
chromium 問(wèn)世后,帶動(dòng)了國(guó)產(chǎn)瀏覽器行業(yè)的發(fā)展。一些基于 chromium 的單核,雙核瀏覽器如雨后春筍般拔地而起,例如 搜狗、360、QQ瀏覽器等等,無(wú)一不是套著不同的外殼用著相同的內(nèi)核。
然而 2013 年 4 月 3 日,谷歌在 Chromium Blog 上發(fā)表 博客,稱將與蘋果的開(kāi)源瀏覽器核心 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) 作為渲染引擎,但出于某種原因,并沒(méi)有將其多進(jìn)程架構(gòu)移植入Webkit。
后來(lái),由于蘋果推出的 WebKit2 與 Chromium 的沙箱設(shè)計(jì)存在沖突,所以 Chromium 一直停留在 WebKit,并使用移植的方式來(lái)實(shí)現(xiàn)和主線 WebKit2 的對(duì)接。這增加了 Chromium 的復(fù)雜性,且在一定程度上影響了 Chromium 的架構(gòu)移植工作。
基于以上原因,Google 決定從 WebKit 衍生出自己的 Blink 引擎(后由 Google 和 Opera Software 共同研發(fā)),將在 WebKit 代碼的基礎(chǔ)上研發(fā)更加快速和簡(jiǎn)約的渲染引擎,并逐步脫離 WebKit 的影響,創(chuàng)造一個(gè)完全獨(dú)立的 Blink 引擎。這樣以來(lái),唯一一條維系 Google 和蘋果之間技術(shù)關(guān)系的紐帶就這樣被切斷了。
Google 和蘋果在多個(gè)領(lǐng)域都是競(jìng)爭(zhēng)對(duì)手,而唯獨(dú)在瀏覽器引擎上有技術(shù)合作,利益一致。但為了各自的利益,誰(shuí)都不會(huì)拿出 100% 的 "誠(chéng)意" 來(lái)做好 WebKit,因?yàn)槟阕龀鰜?lái)的成果競(jìng)爭(zhēng)對(duì)手可以直接享用。移動(dòng)互聯(lián)網(wǎng)已經(jīng)崛起,手機(jī)和平板設(shè)備端必將成為瀏覽器的另一個(gè)戰(zhàn)場(chǎng)。這個(gè)時(shí)候,如果 Google 跟蘋果仍然黏在一起,將會(huì)嚴(yán)重阻礙雙方的進(jìn)步,也會(huì)阻礙 WebKit 的進(jìn)步。
據(jù)說(shuō) Blink 刪除了 880w 行 webkit 代碼。
至于為什么叫 blink?有興趣的可以看下這篇訪談 Paul Irish on Chrome Moving to Blink,里面說(shuō)Blink 引擎問(wèn)世后,國(guó)產(chǎn)各種 chrome 系的瀏覽器也紛紛投入 Blink 的懷抱,可以在瀏覽器地址欄輸入 chrome://version 進(jìn)行查看。比如在 360 下:

2020年1月16日微軟發(fā)布基于chrominum的edge瀏覽器性能提升很大,可與chrome媲美
Presto (['prest??])
Presto 是挪威產(chǎn)瀏覽器 opera 的 "前任" 內(nèi)核,為何說(shuō)是 "前任",因?yàn)樽钚碌?opera 瀏覽器早已將之拋棄從而投入到了谷歌大本營(yíng)。
Opera 的一個(gè)里程碑作品是 Opera7.0,因?yàn)樗褂昧?Opera Software 自主開(kāi)發(fā)的 Presto 渲染引擎,取代了舊版 Opera 4 至 6 版本使用的 Elektra 排版引擎。該款引擎的特點(diǎn)就是渲染速度的優(yōu)化達(dá)到了極致,然而代價(jià)是犧牲了網(wǎng)頁(yè)的兼容性。
Presto 加入了動(dòng)態(tài)功能,例如網(wǎng)頁(yè)或其部分可隨著 DOM 及 Script 語(yǔ)法的事件而重新排版。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 與開(kāi)源的 WebKit 和經(jīng)過(guò)谷歌加持的 Chromium 系列相比毫無(wú)推廣上的優(yōu)勢(shì),這是 Opera 轉(zhuǎn)投 WebKit 的主要原因,并且使用 WebKit 內(nèi)核的 Opera 瀏覽器可以兼容谷歌 Chrome 瀏覽器海量的插件資源。但是換內(nèi)核的代價(jià)對(duì)于 Opera 來(lái)說(shuō)過(guò)于慘痛。使用谷歌的 WebKit 內(nèi)核之后,原本快速,輕量化,穩(wěn)定的 Opera 瀏覽器變得異常的卡頓,而且表現(xiàn)不穩(wěn)定,Opera 原本舊內(nèi)核瀏覽器書簽同步到新內(nèi)核上的工作 Opera 花了整整兩年時(shí)間,期間很多 Opera 的用戶紛紛轉(zhuǎn)投谷歌瀏覽器和其他瀏覽器,造成了眾多的用戶流失。時(shí)至今日現(xiàn)在還有上千萬(wàn)人在使用老版本的 Opera。
很多人都認(rèn)為 Opera 瀏覽器終止在了 12.17,此后所更新的 Opera 版本號(hào)不再是原來(lái)那個(gè) Opera。
說(shuō)好的 Presto Forever 呢?
關(guān)于移動(dòng)端
移動(dòng)端的瀏覽器內(nèi)核主要說(shuō)的是系統(tǒng)內(nèi)置瀏覽器的內(nèi)核。
目前移動(dòng)設(shè)備瀏覽器上常用的內(nèi)核有 Webkit,Blink,Trident,Gecko 等,其中 iPhone 和 iPad 等蘋果 iOS 平臺(tái)主要是 WebKit,Android 4.4 之前的 Android 系統(tǒng)瀏覽器內(nèi)核是 WebKit,Android4.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 年,谷歌開(kāi)始研發(fā) blink 引擎,chrome 28 以后開(kāi)始使用,而 opera 則放棄了自主研發(fā)的 Presto 引擎,投入谷歌懷抱,和谷歌一起研發(fā) blink 引擎,國(guó)內(nèi)各種 chrome系的瀏覽器(360、UC、QQ、2345 等等)也紛紛放棄 webkit,投入 blink 的懷抱。