所謂的「瀏覽器內核」無非指的是一個瀏覽器最核心的部分——「Rendering Engine」,直譯這個詞彙叫作「渲染引擎」,不過咱們也常稱其爲「排版引擎」、「解釋引擎」。這個引擎的做用是幫助瀏覽器來渲染網頁的內容,將頁面內 容和排版代碼轉換爲用戶所見的視圖。javascript
注:有時候咱們所說的「瀏覽器內核」甚至「渲染引擎」,其實除了渲染引擎,也悄悄包含了javascript引擎,如WebKit,它由渲染引擎WebCore和javascript引擎JSCore組成。前端
常見的瀏覽器內核(或者說渲染引擎)有不少個,如Trident、Gecko、WebKit等等,不一樣的內核對網頁編寫語法的解釋也有不一樣,進而致使同一 個頁面在不一樣內核的瀏覽器下顯示出來的效果也會有所出入,這也是前端工程師須要讓做品兼容各類瀏覽器的緣由。java
咱們經常喜歡把瀏覽器內核與某瀏覽器名稱直接掛鉤起來,如IE內核、Chrome內核,實際上是不全面的說法。好比Opera在7.0版本到12.16版本 中採用的是獨立研發的Presto引擎,但在後續跟隨了Chrome的腳步加入了WebKit大本營,放棄了Presto;另外即便名稱相同,但版本不一樣 的引擎也可能存在較大差異。好比IE6使用的是Trident早期版本,存在許多bug,性能也較低。而最新的IE11所使用的Trident7.0版本 已經能夠支持WebGL(3D繪圖標準)以及HTML5大部分標準。git
下面按照各個主流瀏覽器,介紹下它們所使用的瀏覽器內核的歷程。瀏覽器
IE開發計劃開始於1994年夏天,微軟爲抵抗當時主流的網景Netscape Navigator,要在Windows中開發適合本身的瀏覽器,但微軟並無時間從零開始。所以和Spyglass合做,因而IE從早期一款商業性的專 利網頁瀏覽器Spyglass Mosaic派生出來,雖然Spyglass Mosaic與NCSA Mosaic(首款應用得最普遍的網頁瀏覽器)甚爲類似,但Spyglass Mosaic則相對地較不出名並使用了NCSA Mosaic少許的源代碼。安全
1996年,微軟經過給予季度費用和部分收入從Spyglass中取得了Spyglass Mosaic的源代碼和受權。從而使IE逐漸成爲微軟專屬軟件。它採用的排版引擎(俗稱內核)爲Trident。每一次新的IE版本發佈,也標誌着 Trident內核版本號的提高。網絡
下面是各Trident版本信息:前端工程師
冷知識:除Trident以外,微軟還有另外一個網頁瀏覽器排版引擎,稱爲Tasman,它是使用在「Internet Explorer for Mac」的排版引擎。相較於Trident,Tasman引擎對網頁標準有較佳的支持,但微軟自04年開始已經中止了Mac計算機版本的 Internet Explorer的開發。框架
Safari是蘋果公司開發的 瀏覽器,使用了KDE(Linux桌面系統)的KHTML做爲瀏覽器的運算核心,Safari所用瀏覽器內核的名稱是大名鼎鼎的 WebKit。 Safari在2003年1月7日首度發行測試版,併成爲Mac OS X v10.3與以後版本的默認瀏覽器,也成爲蘋果其它系列產品 的指定瀏覽器(也已支持Windows平臺)。ide
如上述可知,WebKit前身是KDE小組的KHTML引擎,能夠說WebKit是KHTML的一個開源的分支。當年蘋果在比較了Gecko和KHTML後,選擇了後者來作引擎開發,是由於KHTML擁有清晰的源碼結構和極快的渲染速度。
須要瞭解的是,雖然咱們稱 WebKit爲瀏覽器內核(或瀏覽器引擎),但不太適合直接稱之爲咱們開頭提到的Rendering Engine(渲染引擎),由於WebKit自己主 要是由兩個引擎構成的,一個正是渲染引擎「WebCore」,另外一個則是javascript解釋引擎「JSCore」,它們均是從KDE的渲染引擎 KHTML及javascript解釋引擎KJS衍生而來。
在2010年4月,蘋果公司宣佈了其瀏覽器引擎Webkit的最新項目 Webkit2。Webkit2的目標是實現獨立進程與非阻斷式API。
WebKit能夠說是蘋果公司給開源世界的一大貢獻,基於此開源引擎,衍生了多個WebKit分支,以下面要介紹的Chrome的瀏覽器引擎。
谷歌Chrome/Chromium瀏覽器從08年創始至今一直使用蘋果公司的WebKit做爲瀏覽器內核原型,是WebKit的一個分支,咱們能夠稱之爲Chromium引擎(注意咱們這裏說的是Chromium引擎,而不是Chromium瀏覽器)。
這裏順便介紹下Chrome和 Chromium兩個瀏覽器的區別——Chromium瀏覽器是谷歌爲發展自家的瀏覽器Chrome而開啓的計劃,因此Chromium至關於 Chrome的工程版或稱實驗版(儘管Chrome自身也有β版階段),新功能會率先在Chromium上實現,待驗證後纔會應用在Chrome上。 Chromium一天最多能夠更新十幾二十個版本,實驗性的新特性都會如今這裏放出,可是Chromium自己其實並不穩定;而Chrome總共有四個更 新分支:Canary、Dev、Beta、Stable,穩定性依次加強。
咱們說回引擎。 Chromium引擎雖然是屬於WebKit的分支,卻把WebKit的代碼梳理得可讀性提升不少,因此之前可能須要一天進行編譯的代碼,如今只要兩個小 時就能搞定。所以Chromium引擎和其它基於WebKit的引擎所渲染頁面的效果也是有出入的。基於以上緣由,有的地方會把Chromium引擎跟 WebKit區分開來,有的地方則直接把Chromium引擎歸爲WebKit(好比維基百科),其實都有其道理。
然而在13年發佈的 Chrome 28.0.1469.0版本開始,Chrome放棄Chromium引擎轉而使用最新的Blink引擎(基於WebKit2——蘋果公司於 2010年推出的新的WebKit引擎),Blink對比上一代的引擎精簡了代碼、改善了DOM框架,也提高了安全性。
Opera瀏覽器,是一款挪威 Opera Software ASA公司製做的支持多頁面標籤式瀏覽的網絡瀏覽器。是跨平臺瀏覽器能夠在Windows、Mac和Linux三個操做系 統平臺上運行。Opera瀏覽器創始於1995年4月,到2014年3月4日,官方發佈的我的電腦用的最新版本爲Opera20。
Opera的一個里程碑做品是Opera7.0,由於它使用了Opera Software自主開發的Presto渲染引擎,取代了舊版Opera 4至6版本使用的Elektra排版引擎。
Presto加入了動態功能,例如網頁或其部分可隨着DOM及Script語法的事件而從新排版。Presto在推出後不斷有更新版本推出,使很多錯誤得以修正,以及閱讀Javascript效能得以最佳化,併成爲當時速度最快的引擎。
然而爲了減小研發成本,Opera在2013年2月宣佈放棄Presto,轉而跟隨Chrome使用WebKit分支的Chromium引擎做爲自家瀏覽器核心引擎。
在Chrome與2013年推出Blink引擎(也是基於WebKit的分支)以後,Opera也緊跟其腳步表示將轉而使用Blink做爲瀏覽器核心引擎。
Mozilla Firefox是一個開源網頁瀏覽器,原名是Firebird,2004年2月9日,Mozilla Firebird決定改稱Mozilla Firefox。Firefox瀏覽器使用的是Gecko內核,其發展歷程以下:
1997年,網景收購了DigitalStyle。當時,網景瀏覽器在各方面的表現已經比不上她的主要競爭對手Internet Explorer。網景開始研發下一代的排版引擎,並指望把新的排版引擎應用於下一版本的網景瀏覽器上。
1998年初,Mozilla 計劃開始執行。這個新的排版引擎名爲Raptor,以開發源碼的方式發放於互聯網上。後來,由於商標問題,Raptor更名爲NGLayout(即 next generation layout之意)。而最後NGLayout就被網景從新命名爲Gecko。
2003年7月15日時代華納解散了網景公司,大部分開發者被解僱。Mozilla基金會亦在當天成立,繼續推進着Gecko的發展。時至今天,Gecko仍繼續由Mozilla的僱員和義工所維護和發展。
最後仍是再談談 javascript引擎(後面統稱JS引擎)這東西。咱們上述的渲染引擎主要是負責HTML、CSS以及其餘一些東西的渲染,而JS引擎則主要負責對 javascript的渲染,一個JS引擎的好壞決定了一個瀏覽器對腳本的加載和執行速度,也影響了其跑分。
下方列出各類主流瀏覽器各自的JS引擎,瞭解下便可:
SpiderMonkey:第一款JavaScript引擎,由Brendan Eich在Netscape Communications時編寫,用於Mozilla Firefox 1.0~3.0版本。
Rhino:由Mozilla基金會管理,開放源代碼,徹底以Java編寫。
TraceMonkey:基於實時編譯的引擎,其中部份代碼取自Tamarin引擎,用於Mozilla Firefox 3.5~3.6版本。
JaegerMonkey:德文Jäger原意爲獵人,結合追蹤和組合碼技術大幅提升性能,部分技術借鑿了V八、JavaScriptCore、WebKit:用於Mozilla Firefox 4.0以上版本。
IonMonkey:能夠對JavaScript編譯後的結果進行優化,用於Mozilla Firefox 18.0以上版本。
OdinMonkey:能夠對asm.js進行優化,用於Mozilla Firefox 22.0以上版本。
V8:開源,由Google丹麥開發,是Google Chrome的一部分。
注:咱們上面提到Chrome是基於 WebKit的分支,而WebKit又由渲染引擎「WebCore」和JS解釋引擎「JSCore」組成,可能會讓你搞不清V8和JSCore的關係。你 能夠這樣理解——WebKit是一塊主板,JSCore是一塊可拆卸的內存條,谷歌實際上認爲Webkit中的JSCore不夠好,才本身搞了一個 V8 JS引擎,這就是Chrome比Safari在某些JS測試中效率更高的緣由。
Chakra:中文譯名爲查克拉,用於Internet Explorer 9的32位版本及IE10+。
Linear A:用於Opera 4.0~6.1版本。
Linear B:用於Opera 7.0~9.2版本。
Futhark:用於Opera 9.5~10.2版本。
Carakan:由Opera軟件公司編寫,自Opera10.50版本開始使用。
KJS:KDE的ECMAScript/JavaScript引擎,最初由Harri Porten開發,用於KDE項目的Konqueror網頁瀏覽器中。
Narcissus:開放源代碼,由Brendan Eich編寫(他也參與編寫了第一個SpiderMonkey)。
Tamarin:由Adobe Labs編寫,Flash Player 9所使用的引擎。
Nitro(原名SquirrelFish):爲Safari 4編寫。