![Chrome源代碼結(jié)構(gòu)[網(wǎng)絡(luò)軟件]_第1頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-12/3/ab366527-202f-4881-8a50-77e8e74d3320/ab366527-202f-4881-8a50-77e8e74d33201.gif)
![Chrome源代碼結(jié)構(gòu)[網(wǎng)絡(luò)軟件]_第2頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-12/3/ab366527-202f-4881-8a50-77e8e74d3320/ab366527-202f-4881-8a50-77e8e74d33202.gif)
![Chrome源代碼結(jié)構(gòu)[網(wǎng)絡(luò)軟件]_第3頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-12/3/ab366527-202f-4881-8a50-77e8e74d3320/ab366527-202f-4881-8a50-77e8e74d33203.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Chrome源代碼結(jié)構(gòu) 首先,開始接觸Chrome的童鞋可能有一個(gè)疑惑,Chrome和Chromium是同一個(gè)東西嗎?答案是,Chrome是Google官方的瀏覽器項(xiàng)目名稱,Chromium是Google官方對(duì)Chrome開源項(xiàng)目。說白了就是Chrome是Google自己的官方瀏覽器版本,而Chromium是開源項(xiàng)目,所有有興趣的開發(fā)者都可以參加,Chromium中出現(xiàn)的新技術(shù)如果經(jīng)過測(cè)試是可靠的,健壯的,那么將可能會(huì)出現(xiàn)在未來發(fā)布的Chrome官方版本中。因此,Chrome版本更新速度要遠(yuǎn)遠(yuǎn)小于Chromium的更新速度。在本文中,筆者為了偷懶,直接用項(xiàng)目名稱Chrome指代Chromium
2、,廢話不多說了,開始為潛入Chrome源代碼的海洋作準(zhǔn)備了。源代碼目錄樹Chrome項(xiàng)目是一個(gè)非常龐大的項(xiàng)目工程,包含的工程(Project)數(shù)量超過了500個(gè),全部代碼加在一起超過4G,全部編譯完成將消耗將近30G的磁盤空間,不愧為恐龍級(jí)別的軟件項(xiàng)目工程。面對(duì)Chrome浩如煙海的源代碼,我們?cè)趺醋x呢?很顯然,一個(gè)文件一個(gè)文件的看,逐行分析是不現(xiàn)實(shí)的,我們必須先從整體來把握整個(gè)Chrome工程,然后逐步細(xì)化去了解每個(gè)具體模塊的功能,并且對(duì)你所感興趣的部分模塊進(jìn)行最后的深入分析。分析任何一個(gè)大型軟件項(xiàng)目的源代碼,我們首先要做的事是參考官方文檔(如果有的話),對(duì)項(xiàng)目的源代碼目錄樹進(jìn)行分析。通過對(duì)
3、源代碼樹的分析,我們可以很快掌握項(xiàng)目中各個(gè)工程之間的依存關(guān)系,了解項(xiàng)目中每個(gè)模塊的大致功能,并且可以很快地找到源代碼分析的入口點(diǎn)。下面圖1所展示的是在Visual Studio 2008中,Chrome項(xiàng)目的源代碼目錄樹結(jié)構(gòu),不同的Chrome版本的源代碼目錄樹可能有一些差別,但其主要某塊的結(jié)構(gòu)變化不大。雖然Chrome整個(gè)源碼工程很龐大,但其代碼結(jié)構(gòu)是非常清晰的,代碼質(zhì)量非常高,代碼的風(fēng)格統(tǒng)一,這將是為后續(xù)代碼分析提供便利?;赩isual Studio 2008那強(qiáng)大的可視化調(diào)試功能,童鞋們只要掌握好分析的粒度,從粗到細(xì),從整體到局部逐漸深入,從面到點(diǎn),通過在關(guān)鍵部分設(shè)置端點(diǎn),有目的的去跟
4、蹤代碼執(zhí)行流程,很快就進(jìn)入狀態(tài)。下面將逐一介紹Chrome源代碼中主要工程模塊的功能。 Chrome項(xiàng)目總體概覽 Chrome為三個(gè)大模塊(其中包含第三方庫(kù)):Browser,Renderer和WebKit。其中Browser(瀏覽器)負(fù)責(zé)主進(jìn)程的啟動(dòng),展現(xiàn)UI以及數(shù)據(jù)I/O。Renderer(渲染器)通常作為是由Browser所調(diào)用的標(biāo)簽的子進(jìn)程,Renderer嵌入WebKit中對(duì)頁(yè)面進(jìn)行布局和渲染。Webkit是Chrome的對(duì)瀏覽器Webkit內(nèi)核的一個(gè)封裝,是瀏覽器內(nèi)核心與外部調(diào)用的一個(gè)中間層。 圖1 Chrome項(xiàng)目的源代碼目錄樹結(jié)構(gòu)app:應(yīng)用平臺(tái)代碼,與國(guó)際化有關(guān),此該目錄中的
5、工程源代碼是和主流操作系統(tǒng)平臺(tái)相關(guān)的系統(tǒng)應(yīng)用代碼。正對(duì)不同操作系統(tǒng),提供了不同的c+實(shí)現(xiàn)文件。例如:剪貼板板調(diào)用、操作系統(tǒng)數(shù)據(jù)交換接口、系統(tǒng)資源管理等。base:基礎(chǔ)設(shè)施代碼,此目錄包含了一些公用庫(kù),包含大量的框架代碼的實(shí)現(xiàn),比如進(jìn)程、線程以及消息循環(huán)的封裝,對(duì)字符串的處理,C+對(duì)象生命周期管理,json解析處理、路徑、日期時(shí)間以及日志服務(wù)等。建議從該部分代碼開始學(xué)習(xí)分析Chrome。因?yàn)橥ㄟ^此處的代碼的分析,對(duì)理解chrome的基礎(chǔ)架構(gòu)設(shè)計(jì)將會(huì)有很大幫助。breakpad:輔助庫(kù),用于崩潰服務(wù)框架。當(dāng)Chrome因?yàn)橐粓?chǎng)而崩潰(Crash)時(shí),捕獲異常,并將崩潰現(xiàn)場(chǎng)數(shù)據(jù)發(fā)送給google進(jìn)行
6、分析。build:編譯構(gòu)建相關(guān)的工具支持庫(kù),其中包括了Google自己的URL解析庫(kù)。chrome:瀏覽器主程序模塊實(shí)現(xiàn)代碼,使核心代碼,將是后續(xù)代碼分析的重點(diǎn)之一。Chrome目錄包括了UI實(shí)現(xiàn)和Render部分兩大部分。其中重要工程是:Browser、Renderer和Plugin等。其中Renderer部分是對(duì)webkit的封裝。該目錄中代碼數(shù)量巨大,Google自己的代碼,后續(xù)改動(dòng)頻繁的代碼大部分集中在這里。chrome_frame:該目錄下是google針對(duì)IE開發(fā)的一個(gè)插件代碼,使得IE可以使用chrome的Renderer渲染引擎來顯示網(wǎng)頁(yè)。content:與瀏覽器頁(yè)面處理相關(guān)的
7、部分。在早期的Chrome版本中,content內(nèi)容包含在chrome目錄中。在新的版本中,Google將瀏覽器頁(yè)面處理部分從chrome模塊摘出來,單獨(dú)形成一個(gè)工程目錄。courgette:輔助庫(kù),昵稱:小胡瓜。該目錄包含一個(gè)用于生成瀏覽器升級(jí)二進(jìn)制包的工具。該工具的目的是減少升級(jí)過程中數(shù)據(jù)下載的大小。例如,升級(jí)需要替換一個(gè)比較大的DLL文件,假設(shè)該文件大小超過5M,而新版本可能只是添加了一行代碼,變化很小。在Chrome在升級(jí)時(shí),通過courgette這個(gè)小工具比較新舊兩個(gè)DLL,找到差異部分,并提取差異部分生成升級(jí)包下在到本地進(jìn)行升級(jí),這樣下載的升級(jí)包可能只有幾十K甚至幾K。這將大大縮短
8、用戶的升級(jí)時(shí)間,對(duì)于網(wǎng)速慢的用戶來說無疑是巨大的福音。gpu:GPU加速模塊,利用GPU渲染頁(yè)面,提高瀏覽器性能。ipc:該目錄里是Chrome的核心庫(kù)之一:進(jìn)程通信基礎(chǔ)設(shè)施庫(kù)。chrome瀏覽器采用多進(jìn)程架構(gòu),進(jìn)程間的通信基于IPC。 在windows下的該IPC庫(kù)采用命名管道、異步IO(完成端口)、共享內(nèi)存來實(shí)現(xiàn)進(jìn)程間數(shù)據(jù)傳輸,效率比較高。IPC庫(kù)不僅封裝了IO機(jī)制,而且還定義了統(tǒng)一的消息傳輸格式,對(duì)多進(jìn)程感興趣的童鞋應(yīng)該仔細(xì)閱讀這里的代碼。jingle:該目錄是XMPP(The eXtensible Messaging and Presence Protocol可擴(kuò)展通訊和表示協(xié)議)的擴(kuò)
9、展協(xié)議模塊。通過Jingle可以實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)(P2P)的多媒體交互會(huì)話控制。例如:語音交互(VOIP)、視頻交互等。Jinggle是由Google和XMPP基金會(huì)共同設(shè)計(jì)的。media:該目錄包含多媒體音頻和視頻解碼相關(guān)的模塊。native_client:該目錄是在瀏覽器中運(yùn)行native代碼的模塊。Native Client是一種可以使本地代碼在瀏覽器上運(yùn)行的技術(shù)。該技術(shù)被視為微軟ActiveX技術(shù)的繼任者。項(xiàng)目具體細(xì)節(jié)可參考native client官網(wǎng)。盡管ActiveX因?yàn)槠浯嗳醯陌踩远柺苡脩艉烷_發(fā)者的詬病,但Native Client是否能克服這些問題依然值得考驗(yàn)。net:該目錄是
10、具體的網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)基礎(chǔ)庫(kù),其中包括ftp、http等客戶端協(xié)議棧的實(shí)現(xiàn)代碼。ppapi:該目錄是一個(gè)瀏覽器插件(Plugin)API模塊,全稱為Pepper Plugin API,是Google在NPAPI(Netscape Plugin API)基礎(chǔ)上的發(fā)展。PPAPI對(duì)NPAPI進(jìn)行了一些修改,使其更方便而且更安全。該擴(kuò)展模塊被設(shè)計(jì)用來緩解進(jìn)程外部拆建執(zhí)行的實(shí)現(xiàn),并且提供一個(gè)框架使得插件完全跨平臺(tái)。該模塊的主要包括:跨瀏覽器的NPAPI的統(tǒng)一語義;擴(kuò)展運(yùn)行與獨(dú)立于渲染器(Renderer)/瀏覽器(Browser)之外的進(jìn)程;使用瀏覽器的合成過程規(guī)范渲染;定義標(biāo)準(zhǔn)化事件和2D光柵功能;提供
11、3D圖形訪問的初步嘗試;插件注冊(cè)。printing:該目錄包含打印模塊,實(shí)現(xiàn)頁(yè)面的打印以及打印預(yù)覽。remoteing:該目錄包含通過終端服務(wù)運(yùn)行應(yīng)用程序的模塊,就是大家聽說過的Chromoting這個(gè)東東。該功能可以在Chrome/Chrome OS上遠(yuǎn)程執(zhí)行其他平臺(tái)上的本地應(yīng)用程序,其方式為終端服務(wù)或者使用RDP或VNC連接到遠(yuǎn)程主機(jī)執(zhí)行應(yīng)用。簡(jiǎn)單說就是Chrome的遠(yuǎn)程桌面功能,目前該功能正在完善中。rlz:該目錄非常特殊,因?yàn)樗莄hrome項(xiàng)目中唯一不提供源代碼的不過分。該模塊主要用于用戶行為追蹤就是將用戶行為收集報(bào)告給google。該模塊雖然這對(duì)Chrome產(chǎn)品的改善計(jì)劃提供了很大
12、幫助,但其內(nèi)在的用戶隱私也存在安全問題,因?yàn)镚oogle會(huì)怎么收集數(shù)據(jù)、收集什么數(shù)據(jù)、數(shù)據(jù)流向都是一個(gè)秘密,:D。sandbox:該目錄包含沙盒安全技術(shù)模塊。該技術(shù)用于在瀏覽網(wǎng)頁(yè)的時(shí)候,保護(hù)計(jì)算機(jī)不被惡意代碼侵入。簡(jiǎn)單說就是虛擬出一個(gè)內(nèi)存空間,將瀏覽Web時(shí)插件對(duì)系統(tǒng)功能的調(diào)用放到這個(gè)虛擬空間中進(jìn)行,如果發(fā)現(xiàn)調(diào)用非法,則立刻回卷這部分內(nèi)容,確保用戶系統(tǒng)關(guān)鍵數(shù)據(jù)不會(huì)被惡意應(yīng)用程序或者病毒修改。該技術(shù)伴隨windows2000操作系統(tǒng)出現(xiàn)。沙箱是相對(duì)安全的,但不是絕對(duì)安全,因?yàn)橐呀?jīng)有攻擊成功案例。skia:該模塊是google收購(gòu)的SKIA公司提供的2D圖形渲染引擎庫(kù)。通常圖形渲染庫(kù)的優(yōu)劣決定了瀏
13、覽器的顯示效果。sql:該目錄是包含Chrome數(shù)據(jù)庫(kù)方面的模塊。Chrome采用了SQLITE3數(shù)據(jù)庫(kù)引擎。在該模塊中包含了對(duì)SQLITE3的封裝以及對(duì)SQL語句的封裝和處理。testing:c+單元測(cè)試框架庫(kù)。third_party:該目錄下是第三方開源支持庫(kù),包含了Chrome項(xiàng)目中所有第三方的開源庫(kù),其中最重要的是webkit內(nèi)核。tools:該目錄包含Chrome項(xiàng)目所使用的工具模塊,比如堆棧調(diào)用、內(nèi)存監(jiān)測(cè)鉤子等等。ui:該目錄是Chrome的界面庫(kù)。v8:該目錄是Javascript引擎,庫(kù),也是chrome的重要內(nèi)核庫(kù)。views:該目錄是Chrome的界面控件元素庫(kù),針對(duì)不同OS平臺(tái)進(jìn)行了統(tǒng)一封裝,其繪制采用skia引擎實(shí)現(xiàn)。Views包括UI事件交互機(jī)制、各種控件(如按鈕、菜單、樹、選擇框等等)。webkit:該目錄并不是Webkit,而是Chrome項(xiàng)目對(duì)webkit內(nèi)核的一個(gè)封裝層。封裝的目的是在上層應(yīng)用調(diào)用和webkit內(nèi)核之間提供一個(gè)中間接口層,使Webkit內(nèi)核功能
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)丹參注射液未來發(fā)展預(yù)測(cè)及投資方向研究報(bào)告
- 中國(guó)獵槍刷行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告(2024-2030)
- 住宅租賃合同范本
- 坡改地項(xiàng)目合同范本
- 家居建材陰陽(yáng)合同范本
- 兄弟共建房合同范本
- 財(cái)務(wù)居家辦公合同范本
- 2025標(biāo)準(zhǔn)版家庭裝修工程合同
- 拆遷門板收購(gòu)合同范本
- 還建房購(gòu)房合同范本
- 2024-2024年上海市高考英語試題及答案
- 2024擴(kuò)張性心肌病研究報(bào)告
- 衛(wèi)生監(jiān)督協(xié)管員培訓(xùn)課件
- 2024年社區(qū)衛(wèi)生服務(wù)中心工作計(jì)劃(五篇)
- GB/T 14233.3-2024醫(yī)用輸液、輸血、注射器具檢驗(yàn)方法第3部分:微生物學(xué)試驗(yàn)方法
- IEC 62368-1標(biāo)準(zhǔn)解讀-中文
- QC課題提高金剛砂地面施工一次合格率
- 《數(shù)學(xué)課程標(biāo)準(zhǔn)》義務(wù)教育2022年修訂版(原版)
- 2023版小學(xué)數(shù)學(xué)課程標(biāo)準(zhǔn)
- 誠(chéng)信課件下載教學(xué)課件
- 工業(yè)圖像識(shí)別中的數(shù)據(jù)增強(qiáng)技術(shù)
評(píng)論
0/150
提交評(píng)論