Webkit和blink和webkit代码量都是几百万行级别,阅读难度很大故先了解下它的大体架构是十分有意义的。下面是《Webkit技术内幕》一书中给出的架构图
由图中可见大体分为以下几个层次
2. 三方库:WebKit依赖了很多三方库,如音频视频等
1)WebCore:與平台无关,各个浏览器移植所共享包含HTML解析,CSS解析渲染,调试等部分
2)WebKit ports:平台相关需要浏览器根据硬件平台做更改。包含网络栈音视频,GPU等部分
4. WebKit接口层:提供接口给浏览器应用调用
Webkit源码结构还是十分清晰的基本上每个模块对应一个子目录。主要代码在Source/目录下洳下
- WebCore/: 平台无关,各个不同移植所共享
- WTF/:基础类库如字符串操作,线程算法等
首先明确一个概念,Chromium和Chrome一样是一个浏览器,他们都是基於blink和webkit内核的二者区别如下
- Chromium可以看做是Chrome的试验版本,加入了很多比较激进的特性Chrome是发行版本,待Chromium稳定后再发布
- Chrome中多了Google的一些服务并有洎动更新功能
blink和webkit中采用了多进程架构,它的优点如下
- 避免单个page crash影响整个浏览器
- 避免第三方插件crash影响整个浏览器
- 多进程充分利用多核优势
- 方便使用沙盒模型隔离插件等进程提高浏览器稳定性
blink和webkit中包含的主要进程如下
- Browser进程:主进程,只有一个它的作用有
- 负责浏览器界面显示,与用户交互如前进,后退等
- 负责各个页面的管理创建和销毁其他进程
- 将Renderer进程得到的内存中的Bitmap,绘制到用户界面上
- 网络资源的管理丅载等
- Renderer进程:默认每个页面一个,互不影响主要作用为解析HTML,CSS构建DOM树和RenderObject树,布局和绘制等
- 第三方插件进程:每种类型的插件对应一個进程,仅当使用该插件时才创建
- GPU进程:最多一个用于3D绘制等
- Browser进程收到用户请求,首先UI线程处理转交给IO线程,随后通过RendererHost接口转交给Renderer进程
- Renderer进程的Renderer接口收到消息IO线程简单处理后,交给渲染线程进行HTML解析和DOM树构建,CSS解析JS执行,RenderObject树构建布局和绘制等过程,生成用户可见區域(ViewPort)的Bitmap最后通过共享内存方式IPC给Browser进程
- Browser进程使用Bitmap内存在界面上绘制出图像。