Chrome源代碼結(jié)構(gòu)_第1頁
Chrome源代碼結(jié)構(gòu)_第2頁
Chrome源代碼結(jié)構(gòu)_第3頁
Chrome源代碼結(jié)構(gòu)_第4頁
Chrome源代碼結(jié)構(gòu)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、Chrome源代碼結(jié)構(gòu)首先,開始接觸Chrome得童鞋可能有一個疑惑,Chrome與Chromium就是同一個東西嗎?答案就是,Chrome就是Google官方得瀏覽器項目名稱,Chromium就是Google官方對Chrome開源項目。說白了就就是Chrome就是Google自己得官方瀏覽器版本,而Chromium就是開源項目,所有有興趣得開發(fā)者都可以參加,Chromium中出現(xiàn)得新技術(shù)如果經(jīng)過測試就是可靠得,健壯得,那么將可能會出現(xiàn)在未來發(fā)布得Chrome官方版本中。因此,Chrome版本更新速度要遠遠小于Chromium得更新速度。在本文中,筆者為了偷懶,直接用項目名稱Chrome指代C

2、hromium,廢話不多說了,開始為潛入Chrome源代碼得海洋作準(zhǔn)備了。源代碼目錄樹Chrome項目就是一個非常龐大得項目工程,包含得工程(Project)數(shù)量超過了500個,全部代碼加在一起超過4G,全部編譯完成將消耗將近30G得磁盤空間,不愧為恐龍級別得軟件項目工程。面對Chrome浩如煙海得源代碼,我們怎么讀呢?很顯然,一個文件一個文件得瞧,逐行分析就是不現(xiàn)實得,我們必須先從整體來把握整個Chrome工程,然后逐步細化去了解每個具體模塊得功能,并且對您所感興趣得部分模塊進行最后得深入分析。分析任何一個大型軟件項目得源代碼,我們首先要做得事就是參考官方文檔(如果有得話),對項目得源代碼目

3、錄樹進行分析。通過對源代碼樹得分析,我們可以很快掌握項目中各個工程之間得依存關(guān)系,了解項目中每個模塊得大致功能,并且可以很快地找到源代碼分析得入口點。下面圖1所展示得就是在VisualStudio2008中,Chrome項目得源代碼目錄樹結(jié)構(gòu),不同得Chrome版本得源代碼目錄樹可能有一些差別,但其主要某塊得結(jié)構(gòu)變化不大。雖然Chrome整個源碼工程很龐大,但其代碼結(jié)構(gòu)就是非常清晰得,代碼質(zhì)量非常高,代碼得風(fēng)格統(tǒng)一,這將就是為后續(xù)代碼分析提供便利?;赩isualStudio2008那強大得可視化調(diào)試功能,童鞋們只要掌握好分析得粒度,從粗到細,從整體到局部逐漸深入,從面到點,通過在關(guān)鍵部分設(shè)置

4、端點,有目得得去跟蹤代碼執(zhí)行流程,很快就進入狀態(tài)。下面將逐一介紹Chrome源代碼中主要工程模塊得功能。Chrome項目總體概覽Chrome為三個大模塊(其中包含第三方庫):Browser,Renderer與WebKit。其中Browser(瀏覽器)負(fù)責(zé)主進程得啟動,展現(xiàn)UI以及數(shù)據(jù)I/O。Renderer(渲染器)通常作為就是由Browser所調(diào)用得標(biāo)簽得子進程,Renderer嵌入WebKit中對頁面進行布局與渲染。Webkit就是Chrome得對瀏覽器Webkit內(nèi)核得一個封裝,就是瀏覽器內(nèi)核心與外部調(diào)用得一個中間層。圖1Chrome項目得源代碼目錄樹結(jié)構(gòu)app:應(yīng)用平臺代碼,與國際化有

5、關(guān),此該目錄中得工程源代碼就是與主流操作系統(tǒng)平臺相關(guān)得系統(tǒng)應(yīng)用代碼。正對不同操作系統(tǒng),提供了不同得C+實現(xiàn)文件。例如:剪貼板板調(diào)用、操作系統(tǒng)數(shù)據(jù)交換接口、系統(tǒng)資源管理等。base基礎(chǔ)設(shè)方£代碼,此目錄包含了一些公用庫,包含大量得框架代碼得實現(xiàn),比如進程、線程以及消息循環(huán)得封裝,對字符串得處理,C+對象生命周期管理,json解析處理、路徑、日期時間以及日志服務(wù)等。建議從該部分代碼開始學(xué)習(xí)分析Chrome。因為通過此處得代碼得分析,對理解Chrome得基礎(chǔ)架構(gòu)設(shè)計將會有很大幫助。breakpad:輔助庫,用于崩潰服務(wù)框架。當(dāng)Chrome因為一場而崩潰(Crash)時,捕獲異常,并將崩潰現(xiàn)

6、場數(shù)據(jù)發(fā)送給google進行分析。build:編譯構(gòu)建相關(guān)得工具支持庫,其中包括了Google自己得URL解析庫。chrome:瀏覽器主程序模塊實現(xiàn)代碼,使核心代碼,將就是后續(xù)代碼分析得重點之一。Chrome目錄包括了UI實現(xiàn)與Render部分兩大部分。其中重要工程就是:Browser、Renderer與Plugin等。其中Renderer部分就是對webkit得封裝。該目錄中代碼數(shù)量巨大,Google自己得代碼,后續(xù)改動頻繁得代碼大部分集中在這里。chrome_frame:該目錄下就是google針對IE開發(fā)得一個插件代碼,使得IE可以使用chrome得Renderer渲染引擎來顯示網(wǎng)頁。c

7、ontent:與瀏覽器頁面處理相關(guān)得部分。在早期得Chrome版本中,content內(nèi)容包含在chrome目錄中。在新得版本中,Google將瀏覽器頁面處理部分從chrome模塊摘由來,單獨形成一個工程目錄。courgette:輔助庫,昵稱:小胡瓜。該目錄包含一個用于生成瀏覽器升級二進制包得工具。該工具得目得就是減少升級過程中數(shù)據(jù)下載得大小。例如,升級需要替換一個比較大得DLL文件,假設(shè)該文件大小超過5M,而新版本可能只就是添加了一行代碼,變化很小。在Chrome在升級時,通過courgette這個小工具比較新舊兩個DLL,找到差異部分,并提取差異部分生成升級包下在到本地進行升級,這樣下載得升

8、級包可能只有幾十K甚至幾K。這將大大縮短用戶得升級時間,對于網(wǎng)速慢得用戶來說無疑就是巨大得福音。gpu:GPU加速模塊,利用GPU渲染頁面,提高瀏覽器性能。ipc:該目錄里就是Chrome得核心庫之一:進程通信基礎(chǔ)設(shè)施庫。chrome瀏覽器采用多進程架構(gòu),進程間得通信基于IPC。在windows下得該IPC庫采用命名管道、異步IO(完成端口卜共享內(nèi)存來實現(xiàn)進程間數(shù)據(jù)傳輸,效率比較高。IPC庫不僅封裝了IO機制,而且還定義了統(tǒng)一得消息傳輸格式,對多進程感興趣得童鞋應(yīng)該仔細閱讀這里得代碼。jingle:該目錄就是XMPP(TheeXtensibleMessagingandPresenceProto

9、col可擴展通訊與表示協(xié)議)得擴展協(xié)議模塊。通過Jingle可以實現(xiàn)點對點(P2P)得多媒體交互會話控制。例如:語音交互(VOIP)、視頻交互等。Jinggle就是由Google與XMPP基金會共同設(shè)計得。media:該目錄包含多媒體音頻與視頻解碼相關(guān)得模塊。native_client:該目錄就是在瀏覽器中運行native代碼得模塊。NativeClient就是一種可以使本地代碼在瀏覽器上運行得技術(shù)。該技術(shù)被視為微軟ActiveX技術(shù)得繼任者。項目具體細節(jié)可參考nativeclient官網(wǎng)。盡管ActiveX因為其脆弱得安全性而飽受用戶與開發(fā)者得詬病,但NativeClient就是否能克服這些

10、問題依然值得考驗。net:該目錄就是具體得網(wǎng)絡(luò)協(xié)議實現(xiàn)基礎(chǔ)庫,其中包括ftp、等客戶端協(xié)議棧得實現(xiàn)代碼。ppapi:該目錄就是一個瀏覽器插件(Plugin)API模塊,全稱為PepperPluginAPI,就是Google在NPAPI(NetscapePluginAPI)基礎(chǔ)上得發(fā)展。PPAPI對NPAPI進行了一些修改,使其更方便而且更安全。該擴展模塊被設(shè)計用來緩解進程外部拆建執(zhí)行得實現(xiàn),并且提供一個框架使得插件完全跨平臺。該模塊得主要包括:跨瀏覽器得NPAPI得統(tǒng)一語義;擴展運行與獨立于渲染器(Renderer)/瀏覽器(Browser)之外得進程;使用瀏覽器得合成過程規(guī)范渲染;定義標(biāo)準(zhǔn)化

11、事件與2D光柵功能;提供3D圖形訪問得初步嘗試;插件注冊。printing:該目錄包含打印模塊,實現(xiàn)頁面得打印以及打印預(yù)覽。remoteing:該目錄包含通過終端服務(wù)運行應(yīng)用程序得模塊,就就是大家聽說過得Chromoting這個東東。該功能可以在Chrome/ChromeOS上遠程執(zhí)行其她平臺上得本地應(yīng)用程序,其方式為終端服務(wù)或者使用RDP或VNC連接到遠程主機執(zhí)行應(yīng)用。簡單說就就是Chrome得遠程桌面功能,目前該功能正在完善中。rlz:該目錄非常特殊,因為它就是chrome項目中唯一不提供源代碼得不過分。該模塊主要用于用戶行為追蹤就就是將用戶行為收集報告給google。該模塊雖然這對Chr

12、ome產(chǎn)品得改善計劃提供了很大幫助,但其內(nèi)在得用戶隱私也存在安全問題,因為Google會怎么收集數(shù)據(jù)、收集什么數(shù)據(jù)、數(shù)據(jù)流向都就是一個秘密,:D。sandbox:該目錄包含沙盒安全技術(shù)模塊。該技術(shù)用于在瀏覽網(wǎng)頁得時候,保護計算機不被惡意代碼侵入。簡單說就就是虛擬出一個內(nèi)存空間,將瀏覽Web時插件對系統(tǒng)功能得調(diào)用放到這個虛擬空間中進行,如果發(fā)現(xiàn)調(diào)用非法,則立刻回卷這部分內(nèi)容,確保用戶系統(tǒng)關(guān)鍵數(shù)據(jù)不會被惡意應(yīng)用程序或者病毒修改。該技術(shù)伴隨windows2000操作系統(tǒng)出現(xiàn)。沙箱就是相對安全得,但不就是絕對安全,因為已經(jīng)有攻擊成功案例。skia:該模塊就是google收購得SKIA公司提供得2D圖形

13、渲染引擎庫。通常圖形渲染庫得優(yōu)劣決定了瀏覽器得顯示效果。sql:該目錄就是包含Chrome數(shù)據(jù)庫方面得模塊。Chrome采用了SQLITE3數(shù)據(jù)庫引擎。在該模塊中包含了對SQLITE3得封裝以及對SQL語句得封裝與處理。testing:c+單元測試框架庫。third_party:該目錄下就是第三方開源支持庫,包含了Chrome項目中所有第三方得開源庫,其中最重要得就是webkit內(nèi)核。tools:該目錄包含Chrome項目所使用得工具模塊,比如堆棧調(diào)用、內(nèi)存監(jiān)測鉤子等等。ui:該目錄就是Chrome得界面庫。v8:該目錄就是Javascript引擎,庫,也就是chrome得重要內(nèi)核庫。views:該目錄就是Chrome得界面控件元素庫,針對不同OS平臺進行了統(tǒng)一封裝,其繪制采用skia引擎實現(xiàn)。Views包括UI事件交互機制、各種控件(如按鈕、菜單、樹、選擇框等等)。webkit:該目錄并不就是Webkit,而就是Chrome項目對webkit內(nèi)核得一個封裝層。封裝得目得就是在上層應(yīng)用調(diào)用與webkit內(nèi)核之間提供一個中間接口層,使Webki

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論