WebKit 渲染过程

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

 

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 硬件渲染、混合渲染模型等方式,这些一样会以之后加以剖析

相关文章
相关标签/搜索