要搞清楚瀏覽器內核是什麼,首先應該先搞清楚瀏覽器的 構成。簡單來講瀏覽器能夠分爲兩部分,shell+內核。其中shell的種類相對比較多,內核則比較少。Shell是指瀏覽器的外殼:例如菜單,工具欄 等。主要是提供給用戶界面操做,參數設置等等。它是調用內核來實現各類功能的。內核纔是瀏覽器的核心。內核是基於標記語言顯示內容的程序或模塊。也有一些 瀏覽器並不區分外殼和內核。從Mozilla將Gecko獨立出來後,纔有了外殼和內核的明確劃分。目前主流的瀏覽器有IE六、IE8、Mozilla、FireFox、Opera、Safari、Chrome、Netscape等。javascript
什麼是瀏覽器內核java
瀏覽器內核又能夠分紅兩部分:渲染引擎(layout engineer或者Rendering Engine)和JS引擎。它負責取得網頁的內容(HTML、XML、圖像等等)、整理訊息(例如加入CSS等),以及計算網頁的顯示方式,而後會輸出至 顯示器或打印機。瀏覽器的內核的不一樣對於網頁的語法解釋會有不一樣,因此渲染的效果也不相同。全部網頁瀏覽器、電子郵件客戶端以及其它須要編輯、顯示網絡內 容的應用程序都須要內核。(參見維基百科)JS引擎則是解析Javascript語言,執行javascript語言來實現網頁的動態效果。最開始渲染引 擎和JS引擎並無區分的很明確,後來JS引擎愈來愈獨立,內核就傾向於只指渲染引擎。有一個網頁標準計劃小組製做了一個ACID來測試引擎的兼容性和性 能。內核的種類不少,如加上沒什麼人使用的非商業的免費內核,可能會有10多種,可是常見的瀏覽器內核能夠分這四種:Trident、Gecko、 Presto、Webkit。shell
Trident又稱MSHTML,是微軟開發的渲染引 擎(包含了Javascript引擎JScript),他已經深刻了Windows操做系統的骨髓,例如Windows Media Play,Windows Explorer,Outlook Express等都使用了。目前不少瀏覽器都使用這個引擎,例如IE,Maxthon(最新版已經不使用)等。windows
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等app
Engineide |
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,缺點是對於網頁代碼的容錯性不高,也就是說對網頁代碼的兼容性較低,會使一些編寫不標準的網頁沒法正確顯示。
總結:就瀏覽器來講,互聯網經歷了十年的高速發展期,近幾年市場上也推出了不少新的瀏覽器,可是他們並不是是採用自主開發的內核,因此瀏覽器內核自己實際沒有實質突破。