第一章 初識WebKit

? ? ? 談到WebKit负乡,我覺得還是挺有緣分的榜田。本人在大學(xué)其實是做Java開發(fā)益兄,然而大學(xué)畢業(yè)后的第一份工作卻是做了基于WebKit的瀏覽器。剛接觸WebKit的時候箭券,感覺代碼實在太龐大净捅,不知如何下手,不過在我組長的幫助下辩块,還是慢慢開始嚼動了這塊硬骨頭蛔六。

? ? ? ?剛開始的時候荆永,你會覺得WebKit就是一塊難啃的硬骨頭,但是當(dāng)你真正理解了一些知識之后国章,你會發(fā)現(xiàn)屁魏,它是一個有框架的老骨頭,它除了搭建自身的框架捉腥,還將其他開源代碼都組合起來。所以你画,看WebKit代碼抵碟,一定不能鉆進代碼里了,那樣你就苦逼的撓頭發(fā)吧(當(dāng)然不排除大牛)坏匪。經(jīng)過這兩年的研究拟逮,發(fā)現(xiàn)要想快速掌握WebKit,一定要先弄懂框架适滓。廢話不多說敦迄,上圖!凭迹!


? ? ? 請原諒我網(wǎng)上隨便扒圖罚屋,哈哈,不過這幅圖確實很到位嗅绸!照著這個架構(gòu)圖去認識WebKit脾猛,你會很快就上手!WebKit代碼主要分WebKit對外API鱼鸠、WebCore猛拴、JSCore和WTF,這些模塊在目錄結(jié)構(gòu)上也非常明朗蚀狰,大家看WebKit源代碼目錄結(jié)構(gòu)就能一目了然愉昆。

? ? ? ?WebKit對外API主要就是封裝了一些基本接口,供應(yīng)用層調(diào)用麻蹋。我們在瀏覽器上經(jīng)常會使用一些基本的功能跛溉,比如加載網(wǎng)頁、刷新哥蔚、返回上一頁倒谷、收藏、處理按鍵鼠標事件等等糙箍。這些功能都是調(diào)用WebKit對外API實現(xiàn)的渤愁。當(dāng)然,具體功能實現(xiàn)肯定不在WebKit對外API層深夯,它只是負責(zé)封裝抖格。

? ? ? ?WebCore模塊是WebKit的關(guān)鍵诺苹,它主要負責(zé)渲染整個頁面,也就是我們看到的頁面整體的面貌都是由它完成的雹拄。它里面主要分為以下子模塊:

? ? ? ?Page:提供對外的總?cè)肟谝约绊撁嫦嚓P(guān)的Chrome收奔、Setting、History等模塊滓玖;

? ? ? ?Document:解析html/xml/svg坪哄,生成DOM樹的子系統(tǒng);

? ? ? ?CSS:負責(zé)CSS的解析和匹配势篡;

? ? ? ?Render:實現(xiàn)Layout和Render過程的子系統(tǒng)

? ? ? ?Graphics:封裝底層圖形庫翩肌,對上提供一套平臺無關(guān)的繪制接口;

? ? ? ?Network:封裝底層網(wǎng)絡(luò)庫禁悠,對上提供一套與平臺無關(guān)的網(wǎng)絡(luò)加載接口念祭;

? ? ? ?Loader:負責(zé)網(wǎng)絡(luò)IO、Form Submission碍侦、Memory Cache等粱坤;

? ? ? ?Script:提供JS執(zhí)行入口以及從C++對象到JS對象轉(zhuǎn)換的Binding和Bridge;

? ? ? ?Extension Modules:實現(xiàn)非DOM的HTML5擴展JS功能模塊瓷产,如Worker站玄、WebSocket、WebStorage拦英、FileAPI等蜒什,可能需要相應(yīng)的Custom Binding代碼;

? ? ? ?Plugin:用于加載NPAPI插件疤估,需要Bridge模塊完成和JS引擎的互動灾常;

? ? ? ?Editing:負責(zé)輸入框文字編輯;

? ? ? ?Inspector:負責(zé)調(diào)試頁面铃拇,也就是瀏覽器吵伲看見的“審查元素”之后彈出來的調(diào)試界面,具體實現(xiàn)需自己開發(fā)慷荔;

? ? ? ?JSCore模塊主要負責(zé)JS腳本的執(zhí)行雕什,WebKit默認采用JavascriptCore引擎,Android采用了V8显晶。相比V8和JavascriptCore贷岸,網(wǎng)上有很多資料介紹其不同點,本人對這塊研究也不是很深磷雇,之前編譯兩個引擎偿警,執(zhí)行同一份js代碼做過對比,執(zhí)行效率差別并不是很大唯笙,感興趣的朋友可以研究一下螟蒸,分享一下個人經(jīng)驗盒使。

? ? ? ?WTF模塊全稱Web Template Library,作為WebKit的主要基礎(chǔ)庫七嫌,它優(yōu)雅的實現(xiàn)了智能指針少办、字符串操作、容器操作诵原,提供了跨平臺的原子操作英妓、時間封裝、線程封裝绍赛、以及高效的內(nèi)存管理手段鞋拟。WebKit的WebCore模塊大量使用了WTF庫的代碼,學(xué)懂了這一模塊惹资,看WebCore代碼會事半功倍。

? ? ? ?簡單的介紹完了各個模塊一些基礎(chǔ)知識航闺,對于剛接觸WebKit的朋友是不是還是一頭霧水褪测。之所以先介紹這些模塊是想告訴大家,以后看代碼或者調(diào)試潦刃,遇到相關(guān)問題可以直接在這個模塊里加打印或者打斷點侮措。先把各個模塊弄清楚了,然后慢慢把所有模塊組織在一起乖杠。這樣學(xué)習(xí)起來就輕松加愉快了分扎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市胧洒,隨后出現(xiàn)的幾起案子畏吓,更是在濱河造成了極大的恐慌,老刑警劉巖卫漫,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菲饼,死亡現(xiàn)場離奇詭異,居然都是意外死亡列赎,警方通過查閱死者的電腦和手機宏悦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來包吝,“玉大人饼煞,你說我怎么就攤上這事∈剑” “怎么了砖瞧?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長掺喻。 經(jīng)常有香客問我芭届,道長储矩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任褂乍,我火速辦了婚禮持隧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逃片。我一直安慰自己屡拨,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布褥实。 她就那樣靜靜地躺著呀狼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪损离。 梳的紋絲不亂的頭發(fā)上哥艇,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音僻澎,去河邊找鬼貌踏。 笑死,一個胖子當(dāng)著我的面吹牛窟勃,可吹牛的內(nèi)容都是我干的祖乳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秉氧,長吁一口氣:“原來是場噩夢啊……” “哼眷昆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起汁咏,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤亚斋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后攘滩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伞访,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年轰驳,在試婚紗的時候發(fā)現(xiàn)自己被綠了厚掷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡级解,死狀恐怖冒黑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情勤哗,我是刑警寧澤抡爹,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站芒划,受9級特大地震影響冬竟,放射性物質(zhì)發(fā)生泄漏欧穴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一泵殴、第九天 我趴在偏房一處隱蔽的房頂上張望涮帘。 院中可真熱鬧,春花似錦笑诅、人聲如沸调缨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弦叶。三九已至,卻和暖如春妇多,著一層夾襖步出監(jiān)牢的瞬間伤哺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工者祖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留默责,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓咸包,卻偏偏與公主長得像,于是被迫代替她去往敵國和親杖虾。 傳聞我的和親對象是個殘疾皇子烂瘫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容