編寫&收錄日期:2015/04/24javascript
瞭解瀏覽器引擎目前的市場和歷史前端
WebKit 是一個開源的瀏覽器引擎。WebKit 也是蘋果Mac OS X 系統引擎框架版本的名稱,主要用於Safari,Dashboard,Mail 和其餘一些Mac OS X 程序。WebKit 所包含的 WebCore 排版引擎和 JSCore 引擎來自於 KDE 的 KHTML 和KJS,當年蘋果比較了 Gecko 和 KHTML 後,仍然選擇了後者,就由於它擁有清晰的源碼結構、極快的渲染速度。java
而這以後在2010年推出的WebKit2是創建在這個基礎之上的,引入別人的一篇文章:web
原文地址:http://blog.csdn.net/milado_nju/article/details/7292164chrome
##概述瀏覽器
在介紹本系列各個專題以前,有必要先解釋一下極其容易混淆的幾個概念,它們是WebKit,WebKit2,Chromium和Chrome。緩存
首先來了解WebKit。廣義上來講,WebKit是一個開源的項目,其前身是來源於KDE的KHTML和KJS。該項目專一於網頁內容的展現,開發出一流的網頁渲染引擎。它不是瀏覽器,並且也不想成爲瀏覽器。 該項目包含兩個部分,第一是WebCore,其中包含了對HTML,CSS等不少W3C規範的實現;第二部分就是狹義上的WebKit,它主要是各個平臺的的移植並提供相對應的Web接口,也就是WebView或者相似WebView,這些接口提供操做和顯示網頁的能力。目前使用WebKit的主流的瀏覽器或者WebView包括Chrome, Safari, QtWebKit, Android Browser以及衆多的移動平臺的瀏覽器。安全
WebKit2相對於狹義上的WebKit而言,它不是WebKit簡單的第二個版本,它是一個新的API層,其最主要的變化在於將網頁的渲染置於單獨的進程,而接口層則在另一個進程,它們之間經過IPC來通信。對於接口的調用者來講,中間的IPC和底下的實現是透明的,這樣作的好處有不少,一個很明顯的好處是,當網頁的渲染出現問題時,不會阻礙Web接口的調用者進程,這會在很大程度上解決或者幫助解決瀏覽器或者這些調用者的穩定性和安全性等問題。架構
Chromium是一個創建在WebKit之上的瀏覽器開源項目,由Google發起的。該項目被建立以來發展迅速,不少先進的技術被採用,如跨進程模型,沙箱模型等等。同時,不少新的規範被支持,例如WebGL,Canvas2D,CSS3以及其餘不少的HTML5特性,基本上天天你均可以看到它的變化,它的版本升級很快。在性能方面,其也備受稱讚,包括快速啓動,網頁加載迅速等。框架
Chrome是Google公司的瀏覽器產品,它基於chromium開源項目,通常選擇穩定的版本做爲它的基礎,它和chromium的不一樣點在於chromium是開源試驗場,會嘗試不少新的東西,當這些東西穩定以後,chrome纔會集成進來,這也就是說chrome的版本會落後於chromium。另一個就是,chrome裏面會加入一些私有的codec,這些僅在chrome中才會出現。再次,chrome還會整合Google的不少服務, 最後chrome還會有自動更新的功能,這也是chromium所沒有的。
目前使用的瀏覽器有:Safari
前端CSS使用標識:-webkit-
因爲 WebKit2 在 WebCore 層面上實現的進程隔離在必定程度上與 Google Chrome/Chromium 本身的沙箱設計存在衝突,故 Google Chrome/Chromium 一直停留在 WebKit,使用 Backport 的方式實現和主線 WebKit2 的兼容。顯而易見這增長了 WebKit 和 Chromium 的複雜性,且在必定程度上影響了 Chromium 的架構移植工做。因此Google 決定從 WebKit 衍生出本身的 Blink Web 引擎,而且Google 在2013年4月的時候公佈計劃將這個渲染引擎做爲Chromium計劃的一部分。
目前使用的瀏覽器有:Chrome,Opera
前端CSS使用標識:-webkit-
Gecko是套開放源代碼的、以C++編寫的網頁排版引擎。Gecko是跨平臺的,能在Microsoft Windows、Linux和Mac OS X等主要操做系統上運行。
目前使用的瀏覽器有:FireFox
前端CSS使用標識:可無
Trident(又稱爲MSHTML),是微軟的視窗操做系統(Windows)搭載的網頁瀏覽器—Internet Explorer的排版引擎的名稱
目前使用的瀏覽器有:IE
前端CSS使用標識:可無
V8在運行以前將JavaScript編譯成了機器碼,而非字節碼或是解釋執行它,以此提高性能。更進一步,使用瞭如內聯緩存(inline caching)等方法來提升性能。
傳統的Javascript是動態語言,又可稱之爲Prototype-based Language,JavaScript繼承方法是使用prototype,經過指定prototype屬性,即可以指定要繼承的目標。屬性能夠在運行時添加到或從對象中刪除,引擎會爲運行中的對象建立一個屬性字典,新的屬性都要經過字典查找屬性在內存中的位置。V8爲object新增屬性的時候,就以上次的hidden class爲父類別,建立新屬性的hidden class的子類別,如此一來屬性訪問再也不須要動態字典查找了。
瀏覽器:Chrome
微軟的javascript引擎
瀏覽器:IE
SpiderMonkey以C及C++編寫,包含直譯器、IonMonkey即時編譯、Decompiler和垃圾回收。
IonMonkey
IonMonkey是Mozilla的第三個JIT編譯器的名稱,它啓用了許多新的最佳化技術,可是這些特點沒法在以前的JägerMonkey架構運行。
IonMonkey更像傳統的編譯器,他使用中間表示層(IR,Intermediate representation)的靜態單賦值形式將SpiderMonkey的字節碼轉換爲Control Flow Graph,這個結構令其餘語言使用的最佳化技術可被使用在JavaScript,其中包含形態的特殊化(type specialization)、行內函式(Inline function)、線性掃描的暫存器配置(linear scan register allocator)、死碼刪除(Dead code elimination)以及儘量將程序移出循環外(Loop-Invariant Code Motion)[17]。
這個編譯器在ARM架構、X86及X86-64能夠快速的將JavaScript函式轉換成原生碼。
IonMonkey在2013年初發行Firefox 18中開始被採用並做爲預設的引擎[18],改進了TraceMonkey與JaegerMonkey不會對程式碼進行解析,自動運行最佳化的缺點。[19]。
OdinMonkey
OdinMonkey用於最佳化JavaScript的子集asm.js,OdinMonkey並不是一個JIT編譯器,他依然採用IonMonkey做爲編譯器,於2013年6月25日正式釋出的Firefox 22採用[20]。
瀏覽器:Firefox