瀏覽器內核-Webkit


關鍵字:瀏覽器內核,瀏覽器引擎,Browser,Webkit,Blink,Chromium。

 

本文簡單介紹一下各種瀏覽器內核。着種介紹一下Webkit。顧名思義,瀏覽器內核就是瀏覽器的核心部分,也可以說是瀏覽器所采用的渲染引擎,負責對網頁語法的解釋(如標准通用標記語言下的一個應用HTMLJavaScript)並渲染(顯示)網頁。常見的瀏覽器內核有:Trident,Gecko,Presto,Webkit等。對於開發者來說,有了瀏覽器內核,你就可以開發一款你自己的瀏覽器。或者在你的應用中嵌入瀏覽器內核,你就可以在你的應用中顯示網頁並運行JaveScript。

 

Trident

 

Trident(IE內核):該內核程序在1997年的IE4中首次被采用,是微軟在Mosaic代碼的基礎之上修改而來的,並沿用到IE11,也被普遍稱作”IE內核”。Trident實際上是一款開放的內核,其接口內核設計的相當成熟,因此才有許多采用IE內核而非IE的瀏覽器(殼瀏覽器)涌現。
 
Trident內核的常見瀏覽器有:  IE6IE7IE8(Trident 4.0)、 IE9(Trident 5.0)、IE10(Trident 6.0); 360安全瀏覽器(1.0-5.0為Trident,6.0為Trident+Webkit,7.0為Trident+Blink) 獵豹極輕瀏覽器360極速瀏覽器(7.5之前為Trident+Webkit,7.5為Trident+Blink) 獵豹安全瀏覽器(1.0-4.2版本為Trident+Webkit,4.3及以后版本為Trident+Blink) 獵豹極輕瀏覽器,傲游瀏覽器(傲游1.x、2.x為 IE內核,3.x為IE與 Webkit雙核)、 百度瀏覽器(早期版本)、 世界之窗瀏覽器(最初為IE內核,2013年采用Chrome+IE內核)、2345瀏覽器、 騰訊TT淘寶瀏覽器采編讀瀏覽器搜狗高速瀏覽器(1.x為Trident,2.0及以后版本為Trident+Webkit)、阿雲瀏覽器(早期版本)、瑞星安全瀏覽器、Slim Browser、 GreenBrowser、愛帆瀏覽器(12 之前版本)、115瀏覽器、155瀏覽器、閃游瀏覽器、N氧化碳瀏覽器、糖果瀏覽器、彩虹瀏覽器、瑞影瀏覽器、勇者無疆瀏覽器、114瀏覽器、螞蟻瀏覽器、飛騰瀏覽器、速達瀏覽器、佐羅瀏覽器、海豚瀏覽器(iPhone/iPad/Android)、UC瀏覽器(Blink內核+Trident內核)等。
 
補充:IE從版本11開始,初步支持WebGL技術。IE8的JavaScript引擎是Jscript,IE9開始用Chakra,這兩個版本區別很大,Chakra無論是速度和標准化方面都很出色。
 

Gecko

 

Gecko(Firefox內核):Netscape6開始采用的內核,后來的 Mozilla FireFox( 火狐瀏覽器) 也采用了該內核,Gecko的特點是代碼完全公開,因此,其可開發程度很高,全世界的程序員都可以為其編寫代碼,增加功能。因為這是個開源內核,因此受到許多人的青睞,Gecko內核的瀏覽器也很多,這也是Gecko內核雖然年輕但市場占有率能夠迅速提高的重要原因。
 
Gecko內核常見的瀏覽器:  Mozilla Firefox、Mozilla SeaMonkey、waterfox(Firefox的64位開源版)、Iceweasel、Epiphany(早期版本)、Flock(早期版本)、K-Meleon。
 
補充:JavaScript引擎是SpiderMonkey。
 

Presto

 

Presto(Opera前內核) (已廢棄): Opera12.17及更早版本曾經采用的內核,現已停止開發並廢棄,該內核在2003年的Opera7中首次被使用,該款引擎的特點就是渲染速度的優化達到了極致,然而代價是犧牲了網頁的兼容性。
 
Opera現已改用Google Chrome的Blink/Chromuim內核。
 

Webkit

 

Webkit亦使用於Apple iOSBlackBerry Tablet OSTizenAmazon Kindle的默認瀏覽器。WebKit的C++應用程序接口提供了一系列的Class以在視窗上顯示網頁內容,並且實現了一些瀏覽器的特色,如用戶鏈接點擊、管理前后頁面列表及近期歷史頁面等等。

WebKit的HTML及JavaScript代碼源自KDEKHTMLKJS庫的一個分支,現已由KDE、Apple、GoogleNokiaBitstreamBlackBerry及Igalia等獨立開發。OS XWindowsGNU/Linux以及其他類Unix系統操作系統,皆支持這個項目。2013年4月3日,Google宣布它創建了WebKit中WebCore組件的分支——Blink,Blink將用於新版Google ChromeOpera

WebKit的WebCoreJavaScriptCore組件使用GNU寬通用公共許可證,其他組件則采用BSD許可證

截至2013年3月7日,Webkit商標已被蘋果公司美國專利及商標局注冊為其商標。

 

緣起

WebKit的代碼源自1998年所開發的KDE的HTML排版引擎KHTML及KDE的JavaScript引擎KJS的代碼。Apple的Don Melton於2001年6月25日開始了WebKit這個項目,當時WebKit僅為KHTMLKJS復刻,Melton在電子郵件中向KDE開發者解釋,KHTMLKJS比起其他技術有着更容易開發、更輕巧(少於140000行程序碼)、更加干凈的設計,以及更與標准兼容的優勢,KHTML及KJS將會通過連接器庫(adapter library)的幫忙被移植到OS X,並重命名為WebCore及JavaScriptCore。JavaScriptCore在2002年6月,於KDE的郵件列表(mailing list)中首度發表,包含着蘋果電腦首次發布的部分。WebCore在2003年1月,首度發布於Macworld Expo中由蘋果電腦CEO Steve Jobs發表的Safari瀏覽器。當WebCore首次使用在第一個Safari的測試版本的同時,JavaScriptCore首次並以私有framework的方式包進Mac OS X v10.2,蘋果電腦將其使用在Sherlock軟件。Mac OS X v10.3是第一個Apple發布內置WebKit的操作系統,盡管它已經被內置在10.2內了。

Apple表示,有些牽涉到OSX的特定功能(例如:Objective-C、KWQ及OS X特定函數)將會在KDE的KHTML中缺席,這行為被稱為不同的發展策略。

 

開發分裂

由於這兩個分支(KHTML及WebCore)有着不同的目的而進行開發,所以他們代碼互相補丁(patch)的難度越來越高。 KHTML的開發者認為,他們不喜歡接受蘋果電腦對於KHTML的改變,並宣稱兩個組織的關系有些不好(a bitter failure,蘋果提交他們相當大的補丁,其中包含相當大數目的改變,但是卻缺少相關文件,並且經常包含着未來的擴充,然而這些補丁對於KDE的開發者而言,要集成回KHTML是相當困難的,此外,蘋果電腦要求開發者閱覽Apple的代碼之前必須簽署保密條款(non-disclosure agreements),甚至還不能訪問蘋果電腦的臭蟲數據庫[來源請求]

在公布離婚的期間,KDE開發者Kurt Pfeifle(pipitas)貼出了一篇文章,宣稱KHTML開發者已經設法從WebCore移植許多(但非全部)Safari所改進的項目回KHTML,而他們一直都希望這些改進是來自於蘋果電腦。這篇文章讓Apple開始聯系KHTML的開發者,並討論有關增進彼起關系的方法及未來的合作模式,事實上KDE項目確實有能力合並一些項目,來改進KHTML的渲染速度以及加入一些新的功能特色,包含Acid2渲染測試的改進。

自從新聞播報了fork事件之后,Apple在CVS發布了他們自己維護的WebKit版本,在他們發布代碼后,Apple及KHTML開發者已經加深了合作關系,許多KHTML的開發者也成為了WebKitSVN代碼庫的審查(Reviewer)及提交者(Submitter)。

WebKit工作團隊同時也逆轉許多Webkit代碼當中,專為蘋果特定的修正,並且實現了一個平台特定的抽象層,可使渲染的代碼於其他平台可以更順利的運作。

在2007年7月,Ars Technica網站發布一篇文章,指出KDE開發團隊將從KHTML轉移到WebKit,再經由多年的集成,KDE開發平台4.5於2010年8月發布,它同時支持WebKit及KHTML,而KHTML的開發仍在繼續。

 

分支

在2013年4月3日,Google宣布他將自行開發WebCore的分支,也就是Blink引擎。Chrome的開發者由於希望在瀏覽器的開發上擁有更大的自由度,同時避免與上游沖突,更可通過移除Chrome沒有使用的組件而簡化自己的程序庫,所以決定開發WebKit的分支版本。同時Opera軟件在同年稍早也宣布,他們將自有引擎轉換到Chromium的程序庫,在此時也同時轉換到Blink的分支。根據這份聲明,WebKit的開發者開始討論移除Chrome相關代碼的可能性,以精簡整個WebKit程序庫。

 

組件

WebCore

WebCore是一個由WebKit項目所開發的布局(Layout)、渲染(Rendering)及HTML和SVGDOM庫,完整的代碼皆由GNU寬通用公共許可證所授權,WebKit框架包裝了WebCore及JavaScriptCore,並提供一個Objective-C應用程序接口來接介由C++所開發的WebCore渲染引擎及JavaScriptCore腳本引擎,通過Cocoa API就可以在應用程序中很簡單的使用這些組件。之后的版本同時包含了一個跨平台的C++抽象平台,並且提供各種API使用。

WebKit通過Acid2Acid3的測試,包含完美像素的渲染(pixel-perfect rendering)以及沒有任何時間及不順的問題。

JavaScriptCore

JavaScriptCore是一個在WebKit中提供JavaScript引擎的框架,而且在OS X作為其他內容的腳本引擎。JavaScriptCore最初是為KDE的JavaScript引擎(KJS)庫及PCRE正則表達式庫,JavaScriptCore從KJS及PCRE復刻之后,已比原先進步了許多,有了新的特色以及極大的性能改進。

在2008年6月2日,WebKit項目宣布,將被重寫為"SquirrelFish",它是一個字節碼解釋器,這個項目演變成SquirreFish Extreme(簡稱為SFX,市場稱之為Nitro),首次公開於2008年9月18日,它會將Javascript編譯為本地的機器語言,不再需要字節碼解釋器,同時加速了JavaScript的運行效率。

Drosera

Drosera是一個JavaScript調試工具,它被包含在每日編譯的WebKit版本內。它被命名為茅膏菜屬,這是一種食蟲植物。Drosera目前已經被Web Inspector替換了。

 

V8 (JavaScript引擎)

V8是一個由美國Google開發的開源JavaScript引擎,用於Google Chrome中。

V8在運行之前將JavaScript編譯成了機器碼,而非字節碼或是解釋執行它,以此提升性能。更進一步,使用了如內聯緩存(inline caching)等方法來提高性能。有了這些功能,JavaScript程序與V8引擎的速度媲美二進制編譯。

傳統的Javascript是動態語言,又可稱之為Prototype-based Language,JavaScript繼承方法是使用prototype,通過指定prototype屬性,便可以指定要繼承的目標。屬性可以在運行時添加到或從對象中刪除,引擎會為運行中的對象創建一個屬性字典,新的屬性都要通過字典查找屬性在內存中的位置。V8為object新增屬性的時候,就以上次的hidden class為父類別,創建新屬性的hidden class的子類別,如此一來屬性訪問不再需要動態字典查找了。

為了縮短由垃圾收集造成的停頓,V8使用stop-the-world, generational, accurate的垃圾收集器。在執行回收之時會暫時中斷程序的執行,而且只處理對象堆棧。還會收集內存內所有對象的指針,可以避免內存溢出的情況。V8匯編器是基於Strongtalk匯編器。

 

參考鏈接:

https://zh.wikipedia.org/wiki/WebKit

https://zh.wikipedia.org/wiki/V8_(JavaScript%E5%BC%95%E6%93%8E)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM