Dom树 CSS树 渲染树

本文介绍了DOM树、CSS树和渲染树的概念及其在网页渲染中的作用。DOM树是HTML文档的节点结构,提供了操作接口;CSS树是由解析CSS后的样式信息构成;渲染树结合了DOM和CSSOM,用于布局和页面呈现。浏览器渲染过程包括解析HTML和CSS,构建DOM和CSSOM,生成渲染树,布局和绘制。

1.构建dom 树
2.构建css 树
3.构建渲染树
4.节点布局
5.页面渲染

HTML DOM 定义了访问和操作 HTML 文档的标准方法。DOM 将 HTML 文档表达为树结构。

核心 DOM - 针对任何结构化文档的标准模型
XML DOM - 针对 XML 文档的标准模型
HTML DOM - 针对 HTML 文档的标准模型

DOM 节点
根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:
整个文档是一个文档节点
每个 HTML 元素是元素节点
HTML 元素内的文本是文本节点
每个 HTML 属性是属性节点
注释是注释节点

写几个常用的API, 来操作DOM节点。
(1)document.getElementById()这个是最基本的了。
(2)object.innerHTML该属性设置或返回object之间的HTML
(3)document.createElement()创建节点对象。
(4)document.body.appendChild()尾部插入结点。
(5)object.parentNode.removeChild(oChildNode);移除结点
remove()方法删除所有匹配的元素,传入的参数用于筛选元素,该方法可以删除元素中所有的子节点,当匹配的节点及后代被删除后,该方法返回值是指向被删除结点的引用,因此可以使用该引用,再使用被删除的元素。

 1.DOM树揭示了DOM对象之间的层次关系,这样就方便动态地对html文档进行增删改查。
  2.增删改查必须要遵循层次关系
  3.文本对象是最底层的节点
  4.获取 对象的值 .value

css树

看着有点像 less 写法(less这种预处理语言,就是借用DOM树的思想,来将less这种语法结构,转译成普通的css语法,最终我们用的还是普通的css语法构成的css文件)。

渲染树

浏览器在构造DOM树的同时也在构造着另一棵树-Render Tree,与DOM树相对应暂且叫它Render树。我们知道DOM树为javascript提供了一些列的访问接口(DOM API),但这棵树是不对外的。它的主要作用就是把HTML按照一定的布局与样式显示出来,用到了CSS的相关知识。从MVC的角度来说,可以将render树看成是V,dom树看成是M,C则是具体的调度者,比HTMLDocumentParser等。
 

深入浅出浏览器渲染原理

 首先浏览器的内核是指支持浏览器运行的最核心的程序,分为两个部分的,一是渲染引擎,另一个是JS引擎。渲染引擎在不同的浏览器中也不是都相同的。比如在 Firefox 中叫做 Gecko,在 Chrome 和 Safari 中都是基于 WebKit 开发的。

浏览器工作大体流程

  渲染引擎首先通过网络获得所请求文档的内容,通常以8K分块的方式完成。
下面是渲染引擎在取得内容之后的基本流程:
  1.解析html为dom树,解析css为cssom。渲染引擎开始解析html,并将标签转化为内容树中的dom节点。
  2. 把dom和cssom结合起来生成渲染树(render)。接着,它解析外部CSS文件及style标签中的样式信息。这些样式信息以及html中的可见性指令将被用来构建另一棵树——render树。Render树由一些包含有颜色和大小等属性的矩形组成,它们将被按照正确的顺序显示到屏幕上。
  3. 布局渲染树,计算几何形状。Render树构建好了之后,将会执行布局过程,它将确定每个节点在屏幕上的确切坐标。
  4. 把渲染树展示到屏幕上。再下一步就是绘制,即遍历render树,并使用UI后端层绘制每个节点。

### DOMCSSOM渲染树的概念及关系 #### 什么是DOM? 文档对象模型(Document Object Model, DOM)是一种用于表示HTML或XML文档的标准编程接口。当浏览器接收到HTML文件并开始解析时,它会将这些标记语言的内容转换为一棵节点,即DOM。这棵中的每个节点代表了一个HTML元素、属性或者文本片段[^4]。 #### CSSOM是什么? 层叠样式表对象模型(CSS Object Model, CSSOM),类似于DOM,但它专注于描述如何应用样式到网页上。一旦外部或内部的CSS资源被下载完成,浏览器就会创建一颗CSSOM来存储所有的样式规则及其对应的选择器信息[^1]。 #### 渲染树的意义 渲染树是由DOMCSSOM共同组合而成的一棵新。此包含了可见于屏幕上的所有内容——无论是来自HTML还是通过CSS定义的视觉效果。只有那些最终会被显示出来的部分才会进入这个阶段;例如,`display:none;`隐藏掉的部分不会出现在渲染树里[^2]。 #### 构建过程概述 整个构建流程可以分为以下几个主要环节: 1. **加载HTML**: 当用户访问某个URL地址之后,浏览器发起HTTP请求获取该页面对应的HTML源码。 2. **构建DOM**: 接着,基于所接收的数据流逐步建立起了反映文档逻辑结构的抽象表现形式—DOM Tree。 3. **加载CSS**: 并行地,在继续读取更多HTML数据之前,任何关联好的CSS文件也会尽快被抓取下来以便尽早影响布局计算工作。 4. **构建CSSOM**: 使用已有的CSS声明建立起另一套专门针对样式的层级体系–CSSOM Tree. 5. **合成渲染树**: 将上述两颗独立存在的木结合起来形成第三种形态叫Render Tree(亦可称为Layout Tree),其中仅保留实际需要呈现给用户的那部分内容节点。 6. **执行布局(Layout)**: 计算每一个可视区域的具体尺寸位置参数等细节方面的东西。 7. **绘制(Paint)**: 把经过精确测量后的图形化组件按照指定顺序画出来构成完整的视图界面供人们观看交互操作之用[^3]. 8. **JavaScript运行**: 如果存在脚本,则可能改变以上任何一个步骤的结果甚至重新触发某些特定事件链路从而引起回流(reflow) 或重绘(repait). #### 示例代码展示简单的DOM操作 下面是一个简单例子演示如何利用javascript动态修改现有的dom元素: ```javascript // 获取id为example的div元素 var divElement = document.getElementById('example'); // 修改其背景颜色 divElement.style.backgroundColor = 'blue'; // 添加一个新的子段落p标签进去 var newParagraph = document.createElement('p'); newParagraph.textContent = 'This is a dynamically added paragraph.'; divElement.appendChild(newParagraph); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值