要搞清楚瀏覽器內核是什麼,首先應該先搞清楚瀏覽器的構成。簡單來說瀏覽器可以分爲兩部分,shell+內核。其中shell的種類相對比較多,內核則比較少。Shell是指瀏覽器的外殼:例如菜單,工具欄等。主要是提供給用戶界面操作,參數設置等等。它是調用內核來實現各種功能的。內核纔是瀏覽器的核心。內核是基於標記語言顯示內容的程序或模塊。也有一些瀏覽器並不區分外殼和內核。從Mozilla將Gecko獨立出來後,纔有了外殼和內核的明確劃分。目前主流的瀏覽器有IE6、IE8、Mozilla、FireFox、Opera、Safari、Chrome、Netscape等。
什麼是瀏覽器內核
瀏覽器內核又可以分成兩部分:渲染引擎(layout engineer或者Rendering Engine)和JS引擎。它負責取得網頁的內容(HTML、XML、圖像等等)、整理訊息(例如加入CSS等),以及計算網頁的顯示方式,然後會輸出至顯示器或打印機。瀏覽器的內核的不同對於網頁的語法解釋會有不同,所以渲染的效果也不相同。所有網頁瀏覽器、電子郵件客戶端以及其它需要編輯、顯示網絡內容的應用程序都需要內核。(參見維基百科)JS引擎則是解析Javascript語言,執行javascript語言來實現網頁的動態效果。最開始渲染引擎和JS引擎並沒有區分的很明確,後來JS引擎越來越獨立,內核就傾向於只指渲染引擎。有一個網頁標準計劃小組製作了一個ACID來測試引擎的兼容性和性能。內核的種類很多,如加上沒什麼人使用的非商業的免費內核,可能會有10多種,但是常見的瀏覽器內核可以分這四種:Trident、Gecko、Presto、Webkit。
Trident又稱MSHTML,是微軟開發的渲染引擎(包含了Javascript引擎JScript),他已經深入了Windows操作系統的骨髓,例如Windows Media Play,Windows Explorer,Outlook Express等都使用了。目前很多瀏覽器都使用這個引擎,例如IE,Maxthon(最新版已經不使用)等。
Gecko是C++開發的,Open Source的渲染引擎,包括了SpiderMonkey(Rhino)。主要的使用者有Firefox。
Webkit是蘋果公司基於KHTML開發的。他包括Webcore和JavaScriptCore(SquirrelFish,V8)兩個引擎。主要的使用者有Safari,Chrome。
Presto由Opera Software公司開始的,用於Opera的渲染引擎。Macromedia Dreamweaver (MX版本及以上)和Adobe Creative Suite 2也使用了Presto的內核。
主流瀏覽器所使用的內核分類
Trident內核:IE,MaxThon,TT,The World,360,搜狗瀏覽器等
Gecko內核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等
Presto內核:Opera7及以上
Webkit內核:Safari,Chrome等
Engine |
Creator |
Software license |
Leading application |
Gecko |
Netscape/Mozilla Foundation |
MPL/GNU GPL/GNU LGPL tri-license |
Mozilla Firefox |
KHTML |
KDE |
GNU LGPL |
Konqueror |
Presto |
Opera Software |
Proprietary |
Opera |
Tasman |
Microsoft |
Proprietary |
Microsoft Entourage |
Trident |
Microsoft |
Proprietary |
Internet Explorer |
WebKit (Based on KHTML) |
WebKit Foundation |
GNU LGPL, BSD-style |
Safari, Google Chrome |
JS引擎
JavaScript最初由網景公司的Brendan Eich設計,是一種動態、弱類型、基於原型的語言,內置支持類。以它爲基礎,制定了ECMAScript標準。他的起源並不是如《Javascript高級程序設計》書中所述,是Brendan Eich自主發明的。(參考aimingoo的考證文章)JavaScript在瀏覽器的實現中還必須含有DOM和BOM。Web瀏覽器一般使用公共API來創建主機對象來負責將DOM對象反射進JavaScript。
Trident |
Gecko |
WebKit |
KHTML |
Presto |
||
Name of ECMAScript Engine |
JScript |
Spidermonkey |
JavaScriptCore |
KJS |
linear b/futhark |
|
ECMAScript Version |
Edition 3 |
Yes |
0.6 |
Yes |
Yes |
7.0 |
JavaScript 1.5 extensions |
No |
0.6 |
Yes |
Yes |
7.0 |
|
JavaScript 1.7 extensions |
No |
1.8.1 |
No |
No |
No |
|
JavaScript 1.8 extensions |
No |
1.9 |
No |
No |
No |
瀏覽器內核實現原理
渲染流程如下所示:
Mozilla架構設計:界面和實現分離。採用標記語言,JavaScript,C++來開發。JSEngine就是指SpideMonkey,Layout就是指Gecko。Mozilla的一個關鍵部分是XPCOM和NSPR。
Webkit的處理流程:
瀏覽器內核的優缺點
Trident:這種瀏覽器內核是IE瀏覽器用的內核,因爲在早期IE佔有大量的市場份額,所以這種內核比較流行,以前有很多網頁也是根據這個內核的標準來編寫的,但是實際上這個內核對真正的網頁標準支持不是很好,甚至在2005年,與網頁標準制定組織(W3C理事會)所制定的標準發生了脫節,同時 Trident 內核本身的BUG比較多,對一些符合W3C標準的網頁代碼支持不是很好,這在早期的IE版本中比較明顯,比如IE5.5以前(包括IE5.5),其實IE6對W3C標準的支持也不是很好,而我們現在很多人都在使用IE6,事實上它也屬於一個比較早的版本。
但是由於IE的高市場佔有率,微軟也很長時間沒有更新Trident內核,這導致了二個結果
1,Trident內核和W3C標準脫節。
2,Trident內核的大量Bug等安全問題沒有得到解決,加上一些專家學者公開自己認爲IE瀏覽器不安全的觀點,使很多用戶開始轉向其他瀏覽器,FF,Opera就是這時期興起的。
Gecko:這是Firefox 和 Flock 所採用內核,這個內核的優點就是功能強大、豐富,可以支持很多複雜網頁效果和瀏覽器擴展接口,但是代價是也顯而易見就是要消耗很多的資源,比如內存。
Presto:Opera 採用的是 Presto內核,Presto內核被稱爲公認的瀏覽網頁速度最快的內核,這得益於它在開發時的天生優勢,在處理JS腳本等腳本語言時,會比其他的內核快3倍左右,缺點就是爲了達到很快的速度而丟掉了一部分網頁兼容性。
Webkit:Webkit 是 Safari 採用的內核,不過 Safari 是蘋果系統下的瀏覽器(雖然也有windows版,但是比較少),所以只簡單介紹一下這個內核的優點和缺點,優點就是網頁瀏覽速度較快,雖然不及 Presto 但是也勝於 Gecko 和 Trident,缺點是對於網頁代碼的容錯性不高,也就是說對網頁代碼的兼容性較低,會使一些編寫不標準的網頁無法正確顯示。
總結:就瀏覽器來說,互聯網經歷了十年的高速發展期,近幾年市場上也推出了很多新的瀏覽器,但是他們並非是採用自主開發的內核,所以瀏覽器內核本身實際沒有實質突破。