




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)向個人汽車租賃合同
- 軟件服務(wù)轉(zhuǎn)讓合同
- 土方轉(zhuǎn)包運輸合同
- 業(yè)務(wù)合作伙伴招募合同
- 合肥手房交易合同
- 衣柜合租合同范本
- 《有機化學(xué)》課程標(biāo)準(zhǔn)
- 醫(yī)療器戒租賃合同范本
- 水質(zhì)檢驗工初級考試模擬題(含參考答案)
- 充電設(shè)備出租合同范本
- GB 8903-2024電梯用鋼絲繩
- GB/T 44143-2024科技人才評價規(guī)范
- 羽毛球比賽對陣表模板
- 三級安全培訓(xùn)考試題附答案【滿分必刷】
- 四年級下冊語文第二單元 快樂讀書吧:十萬個為什么 導(dǎo)讀課件
- 文創(chuàng)產(chǎn)品設(shè)計-課件
- 風(fēng)電場葉片無人機巡檢作業(yè)技術(shù)導(dǎo)則
- “小小科學(xué)家”廣東省少年兒童科學(xué)教育體驗活動+生物試題4
- 《研學(xué)旅行課程設(shè)計》課件-了解研學(xué)旅行概念
- MOOC 財務(wù)報表分析-華中科技大學(xué) 中國大學(xué)慕課答案
- 2024屆南京市建鄴區(qū)中考聯(lián)考物理試卷含解析
評論
0/150
提交評論