webkit笔记,主要来自 朱永盛 《WebKit技术内幕》 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买

Webkit渲染过程包括很多数据和模块

数据:网页内容,DOM树,内部表示,图像

模块:HTML解释器,CSS解释器,JavaScript引擎,布局和绘图模块

根据数据的方向,渲染分三个阶段

1,网页的URL 到构建完DOM 树

2,DOM树 到 构建完 Webkit的绘图上下文

3,绘图上下文 到 最终的图像

下面是详细的对三个步骤的描述(本应该虚线,表示依赖关系)

从网页URL 到 DOM 树

上图描述的是从 网页URL 到 构建完 DOM树这个过程,数字表示的是基本顺序,也不是严格的一致,因为这个过程可能重复并且交叉

具体过程:

1,当 user 输入网页URL的时候,WebKit 调用其资源加载器 加载该 URL对应的网页

2,加载器依赖网络模块建立连接,发送请求并接受答复

3,WebKit接受各种网页或者资源的数据,其中某些资源可能是 同步 或 异步 获取的

4,网页被交给HTML解释器转变为一系列的词语( Token )

5,解释器根据词语构建节点( Node ),形成 DOM 树

6,如果节点是JavaScript代码的话,调用JavaScript引擎解释并执行

7,JavaScript 代码可能会修改 DOM 树的结构

8,如果节点需要依赖其他资源,例如 图片、CSS、视频 等,调用资源加载器来加载它们,但是它们是异步的,不会阻碍当前 DOM 树的创建

如果是JavaScript资源URL(没有标记异步方式),则需要停止当前 DOM 树的创建,直到 JavaScript 的资源加载并被JavaScript引擎执行后才继续DOM树的创建

在上述过程中,网页在加载和渲染过程中会发出 "DOMConent" 事件和 DOM 的 "onload" 事件,分别在 DOM 树构建完之后,以及 DOM 树建完并且网页所依赖的资源都

加载完之后发生,因为某些资源的加载并不会阻碍 DOM 树的创建,所以这两个事件多数时候不是同时发生的

接下来就是 WebKit利用 CSS 和 DOM 树构建 RenderObject 树 直到 绘图上下文

从 CSS 和 DOM 树 到 绘图上下文

这一阶段 的具体过程如下:

1, CSS 文件 被 CSS 解释器 解释成内部表示结构

2, CSS 解释器工作完之后,在 DOM 树上附加解释后的样式信息,这就是 RenderObject 树

3, RenderObject 节点在创建的同时,WebKit会根据网页的层次结构 创建 RenderLayer 树,同时构建一个虚拟的绘图上下文。

其实这中间还有复杂的内部过程,具体后面章节中介绍

RenderObject树的建立并不表示 DOM 树会被销毁,事实上,上述图中的四个内部表示结构一直存在,直到网页被销毁,因为它们对于网页的渲染起了非常大的作用

最后就是根据绘图上下文来生成最终的图像,这一过程主要依赖于 2D 和 3D 图像库(都应该是曲线)

从绘图上下文 到 最终的图像

图中这一阶段对应的具体过程如下:

1,绘图上下文是一个与平台无关的抽象类,它将每个绘图操作桥接到不同的具体实现类,也就是绘图具体实现类

2,绘图实现类也可能有简单的实现,也有可能有复杂的实现。在Chromium中,它的实现相当复杂,需要Chromium的合成器来完成复杂的多进程 和 GPU加速机制 。后面详述

3,绘图实现类将 2D 图形库 或者 3D 图形库 绘制的结果保存下来,交给浏览器来同浏览器界面一起显示

这一过程实际上可能不想图中描述的那么简单,现代浏览器为了绘图上的高效性 和 安全性,可能会在这一过程中引入复杂的机制。 而且,绘图也从之前单纯的软件渲染,

到现在的GPU 硬件渲染、混合渲染模型等方式,这些同样会以以后加以剖析

最新文章

  1. 扫描二维码自动识别手机系统(Android/IOS)
  2. Atitit 贝叶斯算法的原理以及垃圾邮件分类的原理
  3. JAVA实现打印机
  4. 斯坦福第七课:正则化(Regularization)
  5. java笔记--关于线程同步(5种同步方式)【转】
  6. POI 读取Excel文档中的数据——兼容Excel2003和Excel2007
  7. Microsoft.Jet.Oledb.4.0 提供者並未登錄於本機電腦上
  8. android小知识之邮箱地址输入自动完成
  9. zzu--2014年11月16日月潭赛 B称号
  10. pickView不需要明确设置高度
  11. 重磅︱文本挖掘深度学习之word2vec的R语言实现
  12. 用js来实现那些数据结构05(栈02-栈的应用)
  13. java类的种类
  14. String hashcode的兴趣试玩
  15. julia 安装
  16. sql注入-推断是否存在SQL注入-单引号
  17. linux audit审计(6)--audit永久生效的规则配置
  18. node api 之:Buffer
  19. hadoop rebalance
  20. 如何确定拍照时,相机屏幕是横屏or竖屏?

热门文章

  1. PTA Java tips(转载)
  2. springmvc的类型转换器converter
  3. django 面试题
  4. iOS中出现"Check dependenciesWarning: The Copy Bundle Resources build phase contains this target's Info.plist file..."的解决办法A
  5. ubuntu 18 lnmp
  6. Learning Experience of Big Data: Learn to install CentOs 6.5 on my laptop
  7. python应用:爬虫实例(静态网页)
  8. Python基本图形绘制
  9. 对URI的理解
  10. Horner规则求多项式