WebKit

HTML网页和结构

HTML的结构特征可以分为三种:树状结构、层次结构、框结构

1. 网页构成

1.1 基本元素和树状结构

整个网页可以看成一种树形结构

一个完整的网页包括HTML文本,JavaScript代码,CSS代码以及各种各样的资源文件。网络上的每个资源都是由URL标记的,它是URI的一种实现,这表明对于浏览器来讲,区分两个资源是否一致的唯一标准就是他们的URL是否相同

1.2 HTML5新特性

HTML5最主要的新能力是对2D和3D图形以及多媒体方面的支持。包括但不限于HTML5视频、Canvas 2D、WebGL,以及CSS3 3D变换和转换。HTML5定义了新的video元素,支持在网页中播放视频。Canvas2D定义了新的canvas元素,可以利用该元素的2D绘图上下文调用标准定义的接口,绘制2D图形。webGL可以类似地绘制3D图形。CSS3 3D的变换和转换可以作用于任何可视元素,做出3D效果。

2. 网页结构

2.1 框结构

在HTML语法中,“framset”、“frame”、“iframe”可以用啦在当前网页中嵌入新的框结构。

多框结构不适用于移动领域,但依然存在,在传统桌面系统中被广泛使用。

2.2 层次结构

网页的层次结构指网页中的元素可能分布在不同的层次中,也就是说某些元素可能不同于他的父元素所在的层次,因为某些原因,Webkit需要为该元素和它的子女建立一个新层。

例如,对于video元素,需要新建一个层,因为video元素用来播放视频,为它创建一个新的层可以更有效地处理视频解码器和浏览器之间的交互和渲染问题,见11章

需要3D变换的元素也需要单独建立一个层,还有需要2D和3D的绘图操作的元素。

对于需要复杂变换和处理的元素,它们需要新层,所以WebKit为它们构建新层其实是为了渲染引擎在处理上的方柏霓和高效。

那么哪些元素或者说哪些情况下会产生新的层呢?对于不同的渲染引擎,策略可能是不一样的,即使都是WebKit渲染引擎,对于不同的基于webKit的浏览器,分层策略也有可能不一样。

3. webKit的网页渲染过程

3.1 加载和渲染

浏览器的主要作用就是将用户输入的URL装换成可视化的图像。这其中包含着两个过程,其一是网页加载过程,就是从URL到构建DOM树;其二是网页渲染过程,从DOM树到生成可视化图像。两个过程也会有所交叉,统称为网页的渲染过程。

网页渲染还有一个特性,就是网页通常要比屏幕可视面积要大,尤其是在移动端。而当前可见的区域我们称为视图,因为网页面积要比可视区域大,所以浏览器在渲染网页的时候,一般会加入滚动条以帮助翻滚网页。

3.2 WebKit的渲染过程

数据包括网页内容,DOM,内部表示和图像,模块则包括HTML解释器,CSS解释器,JavaScript引擎以及布局和绘图模块。

根据数据的流向,这里将渲染部分分成三个阶段,第一个阶段是从网页的URL到构建完DOM树,第二个阶段是从DOM树到构建完WebKit的绘图上下文,第三阶段是从绘图上下文到生成最终的图像。

w1

数字表示基本顺序,但也不是严格一致。

具体的过程如下:

  1. 当用户输入网页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树的创建。

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

w2

WebKit利用CSS和DOM树构建RenderObject树直到绘图上下文。

这一段的具体过程如下:

  1. CSS文件被CSS解释器解释成内部表示结构
  2. CSS解释器工作完成之后,在DOM树上附加解释后的样式信息,这就是RenderObject树。
  3. RenderObject节点在创建的同时,WebKit会根据网页的层次结构创建RenderLayer树,同时创建一个虚拟的绘图上下文。

RenderObject树的建立并不意味着DOM树会被销毁,事实上,上图中的四个内部表示结构一直存在,直到网页被销毁。

最后是根据绘图上下文来生成最终的图像,这一过程主要依赖于2D和3D图形库。

w3

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

  1. 绘图上下文是一个与平台无关的抽象类,他将每个绘图操作桥接到不同的具体实现类,也就是绘图具体实现类。
  2. 绘图具体实现类也可能有简单的实现,也可能有复杂的实现。在Chromium中,它的实现相当复杂,需要Chromium的合成器来完成复杂的多进程和GPU加速机制。
  3. 绘图实现类将2D图形库或者3D图形库绘制的结果保存下来,交给浏览器来同浏览器界面一起显示。

现代浏览器为了绘图上的高效性和安全性,这一过程可能实际上不会这么简单,可能会引入复杂的机制。而且,绘图也从之前单纯的软件渲染到现在的GPU硬件渲染、混合渲染模型等方式。浏览器其实在随着动画或与用户的交互在不停地重复执行渲染过程。

WebKit架构和模块

1. WebKit架构及模块

1.1 获取WebKit

www.webkit.org

1.2 WebKit架构

w4

虚线框表示该部分模块在不同浏览器使用的WebKit内核中实现是不一样的,不是普遍共享的。实线框表示基本上是共享的,但仍然有一些特性可能不是共享的,而且可以通过不同的编译配置来改变它们的行为。

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2021-2024 Kery
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信