-
WebKit
是一个渲染引擎,而不是一个浏览器;
-
DOM
是对HTML
或者XML
等文档的一种结构化表示方法,通过这种方式,用户可以通过提供标准的接口来访问页面中的任何元素的相关属性,并可对DOM
进行相应的添加、删除和更新操作等;
- 基于
DOM
树的一些可视的节点,WebKit
来根据需要来创建相应的RenderObject
节点,这些节点也构成了Render
树;
- 基于
Render
树,WebKit
也会根据需要来为它们中的某些节点创建新的RenderLayer
节点, 从而形成RenderLayer
树;
-
WebKit
的布局计算和浏览器的渲染,GPU
硬件加速都依赖Render
树和RenderLayer
树;

Render树
Render
树的建立
-
Render
树节点和DOM
树节点不是一一对应关系;下面情况下需要建立新的Render
节点:
-
DOM
树的document
节点;
-
DOM
树中的可视化节点,如HTML,BODY,DIV
等;
- 某些情况下需要建立匿名的
Render
节点,该节点不对应于DOM
树中的任何节点;
-
Render
树建立后,布局运算会计算出相关的属性;其中有位置,大小,是否浮动等;渲染引擎利用这些信息绘制这些元素;
RenderObject
类及其子类
-
RenderObject
是Render
树的节点基础类,提供了一组公共的接口;它在DOM
树创建或DOM
中有动态加入元素时创建;
- 它有很多的子类,这些子类可能对应一些
DOM 树
中的节点,如RenderText
,有些则是容器类,如RenderBlock
;
匿名RenderBlock
对象
-
CSS
中有块级元素和内嵌元素之分;RenderBlock
用来表示块级元素,;
- 为了处理上的方便,某些情况下需要建立匿名的
RenderBlock
对象;因为RenderBlock
的子女必须都是内嵌的元素或都是非内嵌的元素;所以,当它包