各主流瀏覽器內核介紹

所謂的“瀏覽器內核”無非指的是一個瀏覽器最核心的部分——“Rendering

Engine”,直譯這個詞匯叫做“渲染引擎”,不過我們也常稱其為“排版引擎”、“解釋引擎”。這個引擎的作用是幫助瀏覽器來渲染網頁的內容,將頁面內容和排版代碼轉換為用戶所見的視圖。

注:有時候我們所說的“瀏覽器內核”甚至“渲染引擎”,其實除了渲染引擎,也悄悄包含了javascript引擎,如WebKit,它由渲染引擎WebCore和javascript引擎JSCore組成。

常見的瀏覽器內核(或者說渲染引擎)有很多個,如Trident、Gecko、WebKit等等,不同的內核對網頁編寫語法的解釋也有不同,進而導致同一個頁面在不同內核的瀏覽器下顯示出來的效果也會有所出入,這也是前端工程師需要讓作品兼容各種瀏覽器的原因。

我們常常喜歡把瀏覽器內核與某瀏覽器名稱直接掛鉤起來,如IE內核、Chrome內核,其實是不全面的說法。比如Opera在7.0版本到12.16版本中采用的是獨立研發的Presto引擎,但在后續跟隨了Chrome的腳步加入了WebKit大本營,放棄了Presto;另外即使名稱相同,但版本不同的引擎也可能存在較大差別。比如IE6使用的是Trident早期版本,存在許多bug,性能也較低。而最新的IE11所使用的Trident7.0版本已經可以支持WebGL(3D繪圖標準)以及HTML5大部分標準。

下面按照各個主流瀏覽器,介紹下它們所使用的瀏覽器內核的歷程。

Internet?Explorer:

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

Safari是蘋果公司開發的瀏覽器,使用了KDE(Linux桌面系統)的KHTML作為瀏覽器的運算核心,Safari所用瀏覽器內核的名稱是大名鼎鼎的WebKit。?Safari在2003年1月7日首度發行測試版,并成為Mac?OS?X?v10.3與之后版本的默認瀏覽器,也成為蘋果其它系列產品的指定瀏覽器(也已支持Windows平臺)。

如上述可知,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

谷歌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瀏覽器,是一款挪威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作為瀏覽器核心引擎。

Firefox

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引擎,了解下即可:

Firefox:

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原意為獵人,結合追蹤和組合碼技術大幅提高性能,部分技術借鑿了V8、JavaScriptCore、WebKit:用于Mozilla?Firefox?4.0以上版本。

IonMonkey:可以對JavaScript編譯后的結果進行優化,用于Mozilla?Firefox?18.0以上版本。

OdinMonkey:可以對asm.js進行優化,用于Mozilla?Firefox?22.0以上版本。

Chrome:

V8:開源,由Google丹麥開發,是Google?Chrome的一部分。

注:我們上面提到Chrome是基于WebKit的分支,而WebKit又由渲染引擎“WebCore”和JS解釋引擎“JSCore”組成,可能會讓你搞不清V8和JSCore的關系。你可以這樣理解——WebKit是一塊主板,JSCore是一塊可拆卸的內存條,谷歌實際上認為Webkit中的JSCore不夠好,才自己搞了一個V8?JS引擎,這就是Chrome比Safari在某些JS測試中效率更高的原因。

IE:

Chakra:中文譯名為查克拉,用于Internet?Explorer?9的32位版本及IE10+。

Opera:

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編寫。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容