第一章 初识WebKit

      谈到WebKit,我觉得还是挺有缘分的。本人在大学其实是做Java开发,然而大学毕业后的第一份工作却是做了基于WebKit的浏览器。刚接触WebKit的时候,感觉代码实在太庞大,不知如何下手,不过在我组长的帮助下,还是慢慢开始嚼动了这块硬骨头。

       刚开始的时候,你会觉得WebKit就是一块难啃的硬骨头,但是当你真正理解了一些知识之后,你会发现,它是一个有框架的老骨头,它除了搭建自身的框架,还将其他开源代码都组合起来。所以,看WebKit代码,一定不能钻进代码里了,那样你就苦逼的挠头发吧(当然不排除大牛)。经过这两年的研究,发现要想快速掌握WebKit,一定要先弄懂框架。废话不多说,上图!!


      请原谅我网上随便扒图,哈哈,不过这幅图确实很到位!照着这个架构图去认识WebKit,你会很快就上手!WebKit代码主要分WebKit对外API、WebCore、JSCore和WTF,这些模块在目录结构上也非常明朗,大家看WebKit源代码目录结构就能一目了然。

       WebKit对外API主要就是封装了一些基本接口,供应用层调用。我们在浏览器上经常会使用一些基本的功能,比如加载网页、刷新、返回上一页、收藏、处理按键鼠标事件等等。这些功能都是调用WebKit对外API实现的。当然,具体功能实现肯定不在WebKit对外API层,它只是负责封装。

       WebCore模块是WebKit的关键,它主要负责渲染整个页面,也就是我们看到的页面整体的面貌都是由它完成的。它里面主要分为以下子模块:

       Page:提供对外的总入口以及页面相关的Chrome、Setting、History等模块;

       Document:解析html/xml/svg,生成DOM树的子系统;

       CSS:负责CSS的解析和匹配;

       Render:实现Layout和Render过程的子系统

       Graphics:封装底层图形库,对上提供一套平台无关的绘制接口;

       Network:封装底层网络库,对上提供一套与平台无关的网络加载接口;

       Loader:负责网络IO、Form Submission、Memory Cache等;

       Script:提供JS执行入口以及从C++对象到JS对象转换的Binding和Bridge;

       Extension Modules:实现非DOM的HTML5扩展JS功能模块,如Worker、WebSocket、WebStorage、FileAPI等,可能需要相应的Custom Binding代码;

       Plugin:用于加载NPAPI插件,需要Bridge模块完成和JS引擎的互动;

       Editing:负责输入框文字编辑;

       Inspector:负责调试页面,也就是浏览器常看见的“审查元素”之后弹出来的调试界面,具体实现需自己开发;

       JSCore模块主要负责JS脚本的执行,WebKit默认采用JavascriptCore引擎,Android采用了V8。相比V8和JavascriptCore,网上有很多资料介绍其不同点,本人对这块研究也不是很深,之前编译两个引擎,执行同一份js代码做过对比,执行效率差别并不是很大,感兴趣的朋友可以研究一下,分享一下个人经验。

       WTF模块全称Web Template Library,作为WebKit的主要基础库,它优雅的实现了智能指针、字符串操作、容器操作,提供了跨平台的原子操作、时间封装、线程封装、以及高效的内存管理手段。WebKit的WebCore模块大量使用了WTF库的代码,学懂了这一模块,看WebCore代码会事半功倍。

       简单的介绍完了各个模块一些基础知识,对于刚接触WebKit的朋友是不是还是一头雾水。之所以先介绍这些模块是想告诉大家,以后看代码或者调试,遇到相关问题可以直接在这个模块里加打印或者打断点。先把各个模块弄清楚了,然后慢慢把所有模块组织在一起。这样学习起来就轻松加愉快了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容