WebKit
简介
狭义的WebKit是一套开源的网页渲染引擎,广义的WebKit是浏览器内核、浏览器Web接口如WebView何类WebView,采用WebKit的浏览器包括Chrome、Safari、QtWebKit、Android Browser。
WebKit2是新的API,包含两个线程分别负责网页渲染和接口API,他们之间通过IPC进行通信。这样极大地提高了安全性和独立性、稳定性,这样当渲染进程阻塞的时候不会影响接口API的调用。
- Chromium 是基于WebKit的。Chrome由Chromium开发而来。
graph LR
WebKit-->Chromium
graph LR
Chromium-->Chrome
Google已经退出WebKit而搞自己的Blink
Blink 目前就是从 WebKit 直接复制出一
个版本出来,然后将与 chromium 无关的 Ports 全部移除掉,将代码结构重新整理,就目前而言,Blink 的渲染和
WebKit 是一样,但是,以后两者将各自走不同的路。(WebKit当年也是以这样的方式来从KHTML中复制出来的。)
因此,在未来是Blink作为主力而不再是WebKit
http://www.chromium.org/blink
Chromium
WebKit和Chromium代码目录结构
WebKit的代码目录结构
WebKit位于Chromium目录下的src/third_party/WebKit
代码结构
1. qt
2. WebKit2 WebKit2的接口
3. WTF WebKit所使用的基础类库
4. Tools 开发者工具
5. chrome 浏览器主功能
1. app 程序主入口
2. browser 浏览器主功能
3. renderer Renderer进程相关、功能实现
6. chrome OS
7. content Browser进程和renderer进程 页面内容显示和通信设施
1. app ContentAPI app部分接口的实现
2. browser Browser进程 部分接口的实现
3. gpu GPU进程
4. public ConentAPI接口
5. renderer ContentAPI的Renderer部分接口实现
Chromium多进程模型
优缺点
防止由于网页和插件导致的崩溃和卡死;便于实现沙箱模型。
Chromium的进程模型和IPC
- Browser 进程:浏览器的主进程,负责浏览器界面的显示,各个页面的管理,其他各种进程的管理;
- Render 进程:页面的渲染进程,负责页面的渲染工作,WebKit的工作主要在这个进程中完成;
- NPAPI 插件进程:每种类型的插件只会有一个进程,每个插件进程可以被多个 Render 进程共享;
- GPU 进程:最多只有一个,当且仅当 GPU 硬件加速打开的时候才会被创建,主要用于对 3D 加速调用的实现;
- Pepper 插件进程:同 NPAPI 插件进程,不同的是为 Pepper 插件而创建的进程
Browser进程和页面的进程是分离的。其中,Browser进程作为一个独立的进程存在,每个页面独立拥有自己的进程。各个页面之间不会相互影响并且不会影响Browser进程。
WebKit是渲染引擎,Chromium是浏览器
WebKit的功能
- 负责对HTML语言和CSS语言的解析:是对这些语言的解析,是解析其编程语言意义,而不是进行渲染和实现。
- 图片解码
- JavaScript引擎
- 正则表达式
- 布局:负责布局的计算和更新工作
- 文档对象模型(DOM):负责DOM树以及相应的接口
- 渲染:渲染相关的基础设施,渲染树、渲染层次树
- SVG支持
- XML语言解析
- XSLT语言的解析与执行
- URL解析
- Unicode编码解码
- 移植:WebKit在不同平台中的移植实现
- 主要负责网页的解析和渲染工作
Chromium的功能
- Cookie、密码等管理器
- 网络栈:网络传输相关
- SSL/TLS:网络传输安全
- URL解析器(不是WebKit的)
- Unicode解析器(不是WebKit的)
- 沙箱模型,NaCl, 扩展机制,硬件加速等
- 实现浏览器的基本功能和网络的功能;以及一些特有的功能如沙箱和扩展。URL解析器和Unicode解析器同时存在于WebKit和Chromium,因为它们两个都会用到。
Misc WebKit
Misc Chromium
- Chromium中很多设置界面都是使用HTML来编写的而不是使用C/C++编写的。
- 2.