各主流瀏覽器內核介紹

??????? 所謂的“瀏覽器內核”無非指的是一個瀏覽器最核心的部分——“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編寫。

轉載于:https://www.cnblogs.com/PowellZhao/p/5766646.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286654.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286654.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286654.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

測繪地理信息標準(國家、行業、地方)大全來了:測繪地理信息標準化服務平臺

測繪地理信息標準化服務平臺,這里有你需要的所有標準,趕快來圍觀吧!

WPF效果第一百八十七篇之再玩ListBox

大周末的接著上一篇又玩了ListBox,這不又來再次去玩耍ListBox;畢竟是我的最愛,沒辦法就喜歡玩耍他;閑話也不多扯了,直接看最終效果:2、ItemsPanel還是老樣子:<ItemsPanelTemplate x:Key"CommonItemsPanelTemplate"><WrapPanel Orientation"Horizontal&…

Nginx支持比Apache高并發的原因

1.先從各自使用的多路復用IO模型說起&#xff1a; select模型&#xff1a;&#xff08;apache使用&#xff0c;由于受模塊等限制&#xff0c;用的不多&#xff09; 單個進程能夠 監視的文件描述符的數量存在最大限制select()所維護的 存儲大量文件描述符的數據結構 &#xf…

利用pdf.js開發嵌入pdf顯示,以及利用jquery-ui左右分欄顯示

原來考慮用pdf.js的viewer.html頁面&#xff0c;但怎么用都不方便。因此直接用pdf.js在左側連續顯示pdf所有內容&#xff0c;右側顯示其它相關內容&#xff0c;并且左右寬度可以任意拖動&#xff0c;最終實現效果如圖&#xff1a; 代碼&#xff1a;<!DOCTYPE html><ht…

十三、制作 iVX音樂分享小程序

功能介紹 通過前幾節的學習&#xff0c;我們對完成一個應用已經有了一些自己的心得。在此再次再制作一個小的音樂小程序應用。該應用一共分為首頁、榜單頁、音樂分享頁和音樂搜索頁。 首頁&#xff1a; 榜單內容頁&#xff1a; 音樂分享頁&#xff1a; 音樂搜索頁&#xff1a…

01_反射_02_反射類的構造方法

【工程截圖】 【Person.java】 //將要被反射的類 package com.Higgin.reflect; import java.util.List;public class Person {private String name"NULL";private int age0;public Person(){System.out.println("構造方法&#xff1a;Person()");}public P…

西北師范大學地理與環境科學學院考研真題匯總(自然地理學)持續更新。。。

西北師范大學地理與環境學科學院研究生入學考試的所有專業(地圖學與地理信息系統、自然地理學、人文地理學、環境科學、環境工程)的專業課均為自然地理學,本文持續收集整理歷年自然地理學考研入學考試真題。 1998年 一、名詞 1. 焚風 2. 徑流模數 3. 趨同適應 4. 墨卡托…

Android之提示type checking has run into a recrusive problem. Easiest workaround: specify types of your

1 問題 寫kotlin的時候錯誤提示如下 type checking has run into a recrusive problem. Easiest workaround: specify types of your declarations explicitly 2 分析 我寫得是遞歸函數如下&#xff0c;錯誤提示就是上面&#xff0c;是因為我們寫返回值&#xff0c;才導致 s…

私有云搭建 OpenStack(centos7.3, centos-release-openstack-ocata)

OpenStack&#xff08;centos7.3,centos-release-openstack-ocata&#xff09;nova&#xff1a;計算節點queue&#xff1a;消息隊列&#xff0c;系統瓶頸所在scheduler&#xff1a;調度機制conductor&#xff1a;更新數據庫cert&#xff08;objectstore&#xff09;&#xff1a…

C# 類繼承中的私有字段都去了哪里?

最近在看 C 類繼承中的字段內存布局&#xff0c;我就很好奇 C# 中的繼承鏈那些 private 字段都哪里去了? 在內存中是如何布局的&#xff0c;畢竟在子類中是無法訪問的。一&#xff1a;舉例說明 為了方便講述&#xff0c;先上一個例子&#xff1a;internal class Program{stati…

大型分布式網站架構技術總結

本文是學習大型分布式網站架構的技術總結。對架構一個高性能&#xff0c;高可用&#xff0c;可伸縮&#xff0c;可擴展的分布式網站進行了概要性描述&#xff0c;并給出一個架構參考。一部分為讀書筆記&#xff0c;一部分是個人經驗總結。對大型分布式網站架構有很好的參考價值…

python 數據分析找到老外最喜歡的中國美食【完整代碼】

一、環境及依賴 語言&#xff1a;python3.8 抓取&#xff1a;selenium 代理&#xff1a;ipide **注&#xff1a;**想要完整代碼的在末尾&#xff0c;注意新手建議慢慢看完。在此提示一下本篇文章的編寫步驟&#xff1a;1.獲取數據、2.翻譯、3.數據清洗、4.切詞詞權重、5.詞云 …

Android之檢查跳轉的Activity是否存在

1、需求 android我們知道經常會跳各種設置頁面,比如設置默認瀏覽器頁面、設置添加快捷方式權限頁面,我們會根據機型進行適配,但是有時候如果找到也找個頁面不try catch操作程序會奔潰 2、檢查跳轉的Activity是否存在代碼實現 public static boolean hasActivity(Context co…

hihoCoder 1257 Snake Carpet(很簡單的構造方法)

2015 ACM / ICPC 北京現場賽 I 題 構造 注意一個小坑&#xff0c;每條蛇的輸出是要從頭到尾輸出的。 還要注意的是&#xff0c;不能開數組去模擬構造過程&#xff0c;然后輸出&#xff0c;那樣會TLE的。 #include <cstdio> #include <cstring> #include <cmath&…

西北師范大學地理與環境科學學院考研真題匯總(高等數學)持續更新。。。

西北師范大學地理與環境學科學院研究生入學考試的所有專業(地圖學與地理信息系統、自然地理學、人文地理學、環境科學、環境工程)的數學均為自主命題,復習參考教材為同濟大學第五版。

操作系統與多核處理器

這篇文章解答了我心中的疑問&#xff0c;那就是操作系統會自動調度cpu資源來處理多進程&#xff0c;多線程的并發。早在上世紀90年代末&#xff0c;就有眾多業界人士呼吁用CMP(單芯片多處理器)技術來替代復雜性較高的單線程CPU。IBM、惠普、Sun等高端服務器廠商&#xff0c;更是…

Java網絡編程二:Socket詳解

Socket又稱套接字&#xff0c;是連接運行在網絡上兩個程序間的雙向通訊的端點。 一、使用Socket進行網絡通信的過程 服務端&#xff1a;服務器程序將一個套接字綁定到一個特定的端口&#xff0c;并通過此套接字等待和監聽客戶端的連接請求。 客戶端&#xff1a;客戶端程序根據你…

Android之提示Could not find com.android.support:appcompat-v7:25.3.1.

1 問題 編譯第三方項目&#xff0c;錯誤提示如下 Could not find com.android.support:appcompat-v7:25.3.1. Required by:project :sampleproject :sample > com.yanzhenjie:permission:1.0.7project :sample > com.yanzhenjie.alertdialog:alertdialog:1.0.1 Search …

在 .NET 中使用 FixedTimeEquals 應對計時攻擊

計時攻擊 在計算機安全中&#xff0c;計時攻擊&#xff08;Timing attack&#xff09;是旁道攻擊 &#xff08;Side-channel attack&#xff09; 的一種&#xff0c;而旁道攻擊是根據計算機處理過程發出的信息進行分析&#xff0c;包括耗時&#xff0c;聲音&#xff0c;功耗等…

解讀大型網站系統架構的演化

解讀大型網站系統架構的演化 大型網站的架構是根據業務需求不斷完善的&#xff0c;根據不同的業務特征會做特定的設計和考慮&#xff0c;本文只是講述一個常規大型網站會涉及的一些技術和手段。作者&#xff1a;李平來源&#xff1a;LEE的博客前言 一個成熟的大型網站&#xff…