各主流瀏覽器內(nèi)核

非原創(chuàng),瀏覽地址:http://www.cnblogs.com/vajoy/p/3735553.html

所謂的“瀏覽器內(nèi)核”無非指的是一個(gè)瀏覽器最核心的部分——“Rendering

Engine”,直譯這個(gè)詞匯叫做“渲染引擎”雇寇,不過我們也常稱其為“排版引擎”、“解釋引擎”暗甥。這個(gè)引擎的作用是幫助瀏覽器來渲染網(wǎng)頁的內(nèi)容题篷,將頁面內(nèi)容和排版代碼轉(zhuǎn)換為用戶所見的視圖匙赞。

注:有時(shí)候我們所說的“瀏覽器內(nèi)核”甚至“渲染引擎”雕沿,其實(shí)除了渲染引擎练湿,也悄悄包含了javascript引擎,如WebKit审轮,它由渲染引擎WebCore和javascript引擎JSCore組成肥哎。

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

我們常常喜歡把瀏覽器內(nèi)核與某瀏覽器名稱直接掛鉤起來吊圾,如IE內(nèi)核达椰、Chrome內(nèi)核,其實(shí)是不全面的說法街夭。比如Opera在7.0版本到12.16版本中采用的是獨(dú)立研發(fā)的Presto引擎砰碴,但在后續(xù)跟隨了Chrome的腳步加入了WebKit大本營躏筏,放棄了Presto板丽;另外即使名稱相同,但版本不同的引擎也可能存在較大差別。比如IE6使用的是Trident早期版本埃碱,存在許多bug猖辫,性能也較低。而最新的IE11所使用的Trident7.0版本已經(jīng)可以支持WebGL(3D繪圖標(biāo)準(zhǔn))以及HTML5大部分標(biāo)準(zhǔn)砚殿。

下面按照各個(gè)主流瀏覽器啃憎,介紹下它們所使用的瀏覽器內(nèi)核的歷程。

Internet?Explorer:

IE開發(fā)計(jì)劃開始于1994年夏天似炎,微軟為抵抗當(dāng)時(shí)主流的網(wǎng)景Netscape

Navigator辛萍,要在Windows中開發(fā)適合自己的瀏覽器,但微軟并沒有時(shí)間從零開始羡藐。因此和Spyglass合作贩毕,于是IE從早期一款商業(yè)性的專利網(wǎng)頁瀏覽器Spyglass

Mosaic派生出來,雖然Spyglass Mosaic與NCSA Mosaic(首款應(yīng)用得最廣泛的網(wǎng)頁瀏覽器)甚為相似仆嗦,但Spyglass

Mosaic則相對地較不出名并使用了NCSA Mosaic少量的源代碼辉阶。

1996年,微軟通過給予季度費(fèi)用和部分收入從Spyglass中取得了Spyglass

Mosaic的源代碼和授權(quán)瘩扼。從而使IE逐漸成為微軟專屬軟件谆甜。它采用的排版引擎(俗稱內(nèi)核)為Trident。每一次新的IE版本發(fā)布集绰,也標(biāo)志著Trident內(nèi)核版本號的提升规辱。

下面是各Trident版本信息:

冷知識:除Trident之外,微軟還有另一個(gè)網(wǎng)頁瀏覽器排版引擎栽燕,稱為Tasman按摘,它是使用在「Internet Explorer for

Mac」的排版引擎。相較于Trident纫谅,Tasman引擎對網(wǎng)頁標(biāo)準(zhǔn)有較佳的支持炫贤,但微軟自04年開始已經(jīng)停止了Mac計(jì)算機(jī)版本的 Internet

Explorer的開發(fā)。

Safari

Safari是蘋果公司開發(fā)的瀏覽器付秕,使用了KDE(Linux桌面系統(tǒng))的KHTML作為瀏覽器的運(yùn)算核心兰珍,Safari所用瀏覽器內(nèi)核的名稱是大名鼎鼎的WebKit。?Safari在2003年1月7日首度發(fā)行測試版询吴,并成為Mac?OS?X?v10.3與之后版本的默認(rèn)瀏覽器掠河,也成為蘋果其它系列產(chǎn)品的指定瀏覽器(也已支持Windows平臺)。

如上述可知猛计,WebKit前身是KDE小組的KHTML引擎唠摹,可以說WebKit是KHTML的一個(gè)開源的分支。當(dāng)年蘋果在比較了Gecko和KHTML后奉瘤,選擇了后者來做引擎開發(fā)勾拉,是因?yàn)镵HTML擁有清晰的源碼結(jié)構(gòu)和極快的渲染速度煮甥。

需要了解的是,雖然我們稱WebKit為瀏覽器內(nèi)核(或?yàn)g覽器引擎)藕赞,但不太適合直接稱之為我們開頭提到的Rendering?Engine(渲染引擎)成肘,因?yàn)閃ebKit本身主要是由兩個(gè)引擎構(gòu)成的,一個(gè)正是渲染引擎“WebCore”斧蜕,另一個(gè)則是javascript解釋引擎“JSCore”双霍,它們均是從KDE的渲染引擎KHTML及javascript解釋引擎KJS衍生而來。

在2010年4月,蘋果公司宣布了其瀏覽器引擎Webkit的最新項(xiàng)目?Webkit2。Webkit2的目標(biāo)是實(shí)現(xiàn)獨(dú)立進(jìn)程與非阻斷式API震叙。

WebKit可以說是蘋果公司給開源世界的一大貢獻(xiàn),基于此開源引擎顷蟀,衍生了多個(gè)WebKit分支,如下面要介紹的Chrome的瀏覽器引擎骡技。

Chrome?/?Chromium

谷歌Chrome/Chromium瀏覽器從08年創(chuàng)始至今一直使用蘋果公司的WebKit作為瀏覽器內(nèi)核原型鸣个,是WebKit的一個(gè)分支,我們可以稱之為Chromium引擎(注意我們這里說的是Chromium引擎布朦,而不是Chromium瀏覽器)囤萤。

這里順便介紹下Chrome和Chromium兩個(gè)瀏覽器的區(qū)別——Chromium瀏覽器是谷歌為發(fā)展自家的瀏覽器Chrome而開啟的計(jì)劃,所以Chromium相當(dāng)于Chrome的工程版或稱實(shí)驗(yàn)版(盡管Chrome自身也有β版階段)是趴,新功能會率先在Chromium上實(shí)現(xiàn)涛舍,待驗(yàn)證后才會應(yīng)用在Chrome上。Chromium一天最多可以更新十幾二十個(gè)版本唆途,實(shí)驗(yàn)性的新特性都會現(xiàn)在這里放出富雅,但是Chromium本身其實(shí)并不穩(wěn)定;而Chrome總共有四個(gè)更新分支:Canary肛搬、Dev没佑、Beta、Stable温赔,穩(wěn)定性依次增強(qiáng)蛤奢。

我們說回引擎。Chromium引擎雖然是屬于WebKit的分支陶贼,卻把WebKit的代碼梳理得可讀性提高很多啤贩,所以以前可能需要一天進(jìn)行編譯的代碼,現(xiàn)在只要兩個(gè)小時(shí)就能搞定拜秧。因此Chromium引擎和其它基于WebKit的引擎所渲染頁面的效果也是有出入的痹屹。基于以上原因枉氮,有的地方會把Chromium引擎跟WebKit區(qū)分開來志衍,有的地方則直接把Chromium引擎歸為WebKit(比如維基百科)暖庄,其實(shí)都有其道理。

然而在13年發(fā)布的Chrome?28.0.1469.0版本開始足画,Chrome放棄Chromium引擎轉(zhuǎn)而使用最新的Blink引擎(基于WebKit2——蘋果公司于2010年推出的新的WebKit引擎)雄驹,Blink對比上一代的引擎精簡了代碼佃牛、改善了DOM框架淹辞,也提升了安全性。

Opera

Opera瀏覽器俘侠,是一款挪威Opera?Software?ASA公司制作的支持多頁面標(biāo)簽式瀏覽的網(wǎng)絡(luò)瀏覽器象缀。是跨平臺瀏覽器可以在Windows、Mac和Linux三個(gè)操作系統(tǒng)平臺上運(yùn)行爷速。Opera瀏覽器創(chuàng)始于1995年4月央星,到2014年3月4日,官方發(fā)布的個(gè)人電腦用的最新版本為Opera20惫东。

Opera的一個(gè)里程碑作品是Opera7.0莉给,因?yàn)樗褂昧薕pera?Software自主開發(fā)的Presto渲染引擎,取代了舊版Opera?4至6版本使用的Elektra排版引擎廉沮。

Presto加入了動(dòng)態(tài)功能颓遏,例如網(wǎng)頁或其部分可隨著DOM及Script語法的事件而重新排版。Presto在推出后不斷有更新版本推出滞时,使不少錯(cuò)誤得以修正叁幢,以及閱讀Javascript效能得以最佳化,并成為當(dāng)時(shí)速度最快的引擎坪稽。

然而為了減少研發(fā)成本曼玩,Opera在2013年2月宣布放棄Presto,轉(zhuǎn)而跟隨Chrome使用WebKit分支的Chromium引擎作為自家瀏覽器核心引擎窒百。

在Chrome與2013年推出Blink引擎(也是基于WebKit的分支)之后黍判,Opera也緊跟其腳步表示將轉(zhuǎn)而使用Blink作為瀏覽器核心引擎。

Firefox

Mozilla?Firefox是一個(gè)開源網(wǎng)頁瀏覽器篙梢,原名是Firebird样悟,2004年2月9日,Mozilla?Firebird決定改稱Mozilla?Firefox庭猩。Firefox瀏覽器使用的是Gecko內(nèi)核窟她,其發(fā)展歷程如下:

1997年,網(wǎng)景收購了DigitalStyle蔼水。當(dāng)時(shí)震糖,網(wǎng)景瀏覽器在各方面的表現(xiàn)已經(jīng)比不上她的主要競爭對手Internet?Explorer。網(wǎng)景開始研發(fā)下一代的排版引擎趴腋,并期望把新的排版引擎應(yīng)用于下一版本的網(wǎng)景瀏覽器上吊说。

1998年初论咏,Mozilla計(jì)劃開始執(zhí)行。這個(gè)新的排版引擎名為Raptor颁井,以開發(fā)源碼的方式發(fā)放于互聯(lián)網(wǎng)上厅贪。后來,因?yàn)樯虡?biāo)問題雅宾,Raptor改名為NGLayout(即next?generation?layout之意)养涮。而最后NGLayout就被網(wǎng)景重新命名為Gecko。

2003年7月15日時(shí)代華納解散了網(wǎng)景公司眉抬,大部分開發(fā)者被解雇贯吓。Mozilla基金會亦在當(dāng)天成立,繼續(xù)推動(dòng)著Gecko的發(fā)展蜀变。時(shí)至今天悄谐,Gecko仍繼續(xù)由Mozilla的雇員和義工所維護(hù)和發(fā)展。

最后還是再談?wù)刯avascript引擎(后面統(tǒng)稱JS引擎)這東西库北。我們上述的渲染引擎主要是負(fù)責(zé)HTML爬舰、CSS以及其他一些東西的渲染,而JS引擎則主要負(fù)責(zé)對javascript的渲染寒瓦,一個(gè)JS引擎的好壞決定了一個(gè)瀏覽器對腳本的加載和執(zhí)行速度情屹,也影響了其跑分。

下方列出各種主流瀏覽器各自的JS引擎孵构,了解下即可:

Firefox:

SpiderMonkey:第一款JavaScript引擎屁商,由Brendan?Eich在Netscape?Communications時(shí)編寫,用于Mozilla?Firefox?1.0~3.0版本颈墅。

Rhino:由Mozilla基金會管理蜡镶,開放源代碼,完全以Java編寫恤筛。

TraceMonkey:基于實(shí)時(shí)編譯的引擎官还,其中部份代碼取自Tamarin引擎,用于Mozilla?Firefox?3.5~3.6版本毒坛。

JaegerMonkey:德文J?ger原意為獵人望伦,結(jié)合追蹤和組合碼技術(shù)大幅提高性能,部分技術(shù)借鑿了V8煎殷、JavaScriptCore屯伞、WebKit:用于Mozilla?Firefox?4.0以上版本。

IonMonkey:可以對JavaScript編譯后的結(jié)果進(jìn)行優(yōu)化豪直,用于Mozilla?Firefox?18.0以上版本劣摇。

OdinMonkey:可以對asm.js進(jìn)行優(yōu)化,用于Mozilla?Firefox?22.0以上版本弓乙。

Chrome:

V8:開源末融,由Google丹麥開發(fā)钧惧,是Google?Chrome的一部分。

注:我們上面提到Chrome是基于WebKit的分支勾习,而WebKit又由渲染引擎“WebCore”和JS解釋引擎“JSCore”組成浓瞪,可能會讓你搞不清V8和JSCore的關(guān)系。你可以這樣理解——WebKit是一塊主板巧婶,JSCore是一塊可拆卸的內(nèi)存條乾颁,谷歌實(shí)際上認(rèn)為Webkit中的JSCore不夠好,才自己搞了一個(gè)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軟件公司編寫,自O(shè)pera10.50版本開始使用荧库。

其它:

KJS:KDE的ECMAScript/JavaScript引擎堰塌,最初由Harri?Porten開發(fā),用于KDE項(xiàng)目的Konqueror網(wǎng)頁瀏覽器中分衫。

Narcissus:開放源代碼场刑,由Brendan?Eich編寫(他也參與編寫了第一個(gè)SpiderMonkey)。

Tamarin:由Adobe?Labs編寫蚪战,F(xiàn)lash?Player?9所使用的引擎牵现。

Nitro(原名SquirrelFish):為Safari?4編寫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邀桑,一起剝皮案震驚了整個(gè)濱河市瞎疼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌壁畸,老刑警劉巖贼急,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捏萍,居然都是意外死亡太抓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門令杈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來走敌,“玉大人,你說我怎么就攤上這事这揣』诔#” “怎么了影斑?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長机打。 經(jīng)常有香客問我矫户,道長,這世上最難降的妖魔是什么残邀? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任皆辽,我火速辦了婚禮,結(jié)果婚禮上芥挣,老公的妹妹穿的比我還像新娘驱闷。我一直安慰自己,他們只是感情好空免,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布空另。 她就那樣靜靜地躺著,像睡著了一般蹋砚。 火紅的嫁衣襯著肌膚如雪扼菠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天坝咐,我揣著相機(jī)與錄音循榆,去河邊找鬼。 笑死墨坚,一個(gè)胖子當(dāng)著我的面吹牛秧饮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泽篮,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盗尸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了咪辱?” 一聲冷哼從身側(cè)響起振劳,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎油狂,沒想到半個(gè)月后历恐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡专筷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年弱贼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磷蛹。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吮旅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情庇勃,我是刑警寧澤檬嘀,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站责嚷,受9級特大地震影響鸳兽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜罕拂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一揍异、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧爆班,春花似錦衷掷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碗旅,卻和暖如春渡处,著一層夾襖步出監(jiān)牢的瞬間镜悉,已是汗流浹背祟辟。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留侣肄,地道東北人旧困。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像稼锅,于是被迫代替她去往敵國和親吼具。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容