资料
WebKit概述
发展
- 开源的项目,专注于网页内容的展示,开发出一流的网页渲染引擎;包括:
WebCore
,包含了对HTML,CSS
等W3C
规范的实现;WebView
,为各个平台的移植并提供相对应的Web
接口来操作和显示网页;
WebKit2
: 新的API
层,主要的变化在于将网页的渲染和接口层置于单独的进程,通过IPC
来通讯;
*当网页渲染出现问题时,不会阻碍接口的调用者进程,在很大程度上帮助解决浏览器或调用者的稳定性和安全性问题;Blink
:即从WebKi
直接复制出来,整理并移除与chromium无关的
接口;
*和WebKit
差别越来越大;- 为
iframes
内容创建单独的沙箱进程来渲染; - 将
DOM
移入JavaScript
中,使JS可以更快的访问DOM
;
- 为
Chromium
: 建立在WebKit/Blink
之上的浏览器开源项目(浏览器);- 采用,如跨进程模型,沙箱模型等新技术;同时支持,如
WebGL
,Canvas2D
,CSS3
以及其他HTML5
规范;
- 采用,如跨进程模型,沙箱模型等新技术;同时支持,如
Chrome
:基于chromium
开源项目的浏览器,一般选择稳定的版本作为基础,同时整合Google
的很多服务;
WebKit
功能模块
HTML
解析:负责HTML
语言的解析;CSS
解析:负责CSS
的解析工作;- 图片解码:支持不同编码格式的图片;
JS
引擎:JavaScript
的解析引擎,缺省的是JavaScriptCore
;但是目前V8
更流行;- 正则表达式
- 布局:负责
layout
的计算和更新工作; - 文档对象模型:
负责
DOM`树及其相应的接口; - 渲染:与渲染相关的基础设施,如渲染树,渲染层次树等;
SVG
支持;XML
语言解析;XSLT
语言的解析;URL
解析器:URL
规范的解析;Unicode
编解码器:各种编码解码工作;- 移植:
WebKit
中比较大的一部分,不同平台因的移植有不同的实现;
Chromium概述
Chromium
功能模块
Cookie
管理器:cookie
生命周期的管理;- 历史管理器:历史记录的管理;
- 密码管理器:网页中密码登录信息管理;
- 窗口管理:多个
Tab
的管理和切换; - 地址栏:地址栏功能,智能地址填充与书签的协同工作;
- 安全浏览黑名单管理:安全浏览机制
- 网络栈:与网络传输相关的工作
SSL/TLS
:网络传输安全;- 磁盘缓存:磁盘缓存页面及其替换策略等生命周期的管理;
- 下载管理器:管理下载相关;
- 粘帖板:
clipboard
的功能; - 书签管理:书签的组织和管理;
URL
解析器:同WebKit
;Unicode
编解码器:同WebKit
;- 沙箱模型,
NaCl
,扩展机制,硬件加速架构等等;
Chromium
界面
- 分成两个主要部分:网页内容和外边的修饰控件;
- chrome://chrome-urls/;
Chromium
多进程模型
- 很大程度上也是
WebKit2
产生的原因;
概述
-
多进程架构的好处:
* 避免单个页面的不响应或奔溃影响整个浏览器的稳定性;
* 第三方插件奔溃时候不会影响页面或浏览器的稳定性;
* 方便安全模型的实施; //沙箱模型是基于多进程架构的 -
进程模型:方框代表进程,连接线代表
IPC
进程间通信;
进程类型
Browser
进程:浏览器的主进程,负责界面的显示,页面的管理,其他各种进程的管理;Render
进程:页面的渲染进程,WebKit
的工作主要在这个进程中完成;NPAPI
插件进程:每种类型的插件只会有一个进程,每个插件进程可以被多个Render
进程共享;GPU
进程:最多只有一个,当且仅当GPU
硬件加速打开的时候才会被创建,主要用于对3D
加速调用的实现;Pepper
插件进程:同NPAPI
插件进程,不同的是为Pepper
插件而创建的进程;
进程特征
browser
进程和页面是分开的,这保证了页面的奔溃不会导致浏览器主界面的奔溃;- 每个页面是独立的进程,这保证了页面之间相互不影响;
- 插件进程独立,插件的问题不会影响浏览器主界面和页面;
进程模型的类型
Process-per-site-instance
: 对同一个域的实例都会创建独立的进程;好处是每个页面互不 影响,坏处自然是资源的巨大浪费;Process-per-site
: 不同一个域会创建独立的进程,同一域的不同实例共享同一个进程;好处是对于不同的域可以共享, 相对较小的内存消耗,坏处是可能会有特别大的Renderer
进程;Process-per-tab
: 为每个标签页创建一个独立的进程,这也是chrome/chromium
的缺省行为;Single process
: 不为页面创建任何独立的进程,所有渲染工作都在browser
进程中;实验性质,不推荐使用;
沙箱模型
- 在页面的多进程模型中,页面的渲染是运行在沙箱模型中的
Render
进程中实现的; - 这些渲染引擎没有访问本地资源的能力,这可以保护渲染引擎被入侵;