Real DOM, Virtual DOM, Shadow DOM,之间有什么区别

Real DOM(真实DOM)

Real DOM(真实 DOM)是浏览器中的实际文档对象模型。在网页开发中,HTML 文档的结构和内容以及与之相关的 CSS 样式构成了网页的表示。Real DOM 表示了这个网页的当前状态,包括所有的 HTML 元素、属性、文本内容、样式和布局信息等。

当一个网页加载时,浏览器会解析 HTML 和 CSS,并根据这些信息构建出 Real DOM。Real DOM 是一个树状结构,其中每个节点都代表着一个 HTML 元素,而节点之间的关系反映了它们在文档中的层次结构。

一旦 Real DOM 被构建,任何对网页内容的更改都会通过操作 Real DOM 来实现。例如,通过 JavaScript 脚本可以动态地创建、修改或删除 HTML 元素。这些更改会导致 Real DOM 发生变化。当 Real DOM 发生变化时,浏览器会重新计算网页的布局和样式,并且必要时重新绘制整个页面,以确保页面呈现与实际 DOM 的状态一致。

Virtual DOM(虚拟DOM)

Virtual DOM(虚拟 DOM)是一种用于优化网页性能的概念,主要应用于一些现代的JavaScript库和框架,例如 React。它是一个存在于内存中的轻量级复制品,用于表示真实 DOM 树的状态。虚拟 DOM 的概念旨在减少直接操作真实 DOM 带来的性能开销,从而提高网页的响应性能和渲染效率。

虚拟 DOM 的工作原理如下:

  1. 初始化阶段:当网页加载时,虚拟 DOM 会根据真实 DOM 的结构和内容创建一个初始状态的虚拟 DOM 树,这个虚拟 DOM 树是一个轻量级的 JavaScript 对象。
  2. 渲染阶段:当数据发生变化时,应用程序会生成一个新的虚拟 DOM 树,表示更新后的状态。
  3. Diff 阶段:新旧两个虚拟 DOM 树会进行比较,找出两者之间的差异。这个过程被称为 Diff 算法,它会检测出哪些地方需要更新。
  4. 批量更新阶段:Diff 算法找到差异后,会生成一系列需要更新的操作。这些操作被合并成一个批量更新,以减少对真实 DOM 的操作次数。
  5. 应用更新阶段:批量更新会被应用到真实 DOM 上,仅仅更新需要更改的部分。这个过程被称为 Reconciliation,它确保真实 DOM 反映了虚拟 DOM 的最新状态。

Shadow DOM(影子DOM)

Shadow DOM(影子 DOM)是一种浏览器技术,用于在网页上创建具有隔离作用域的 DOM 子树。它允许你在 HTML 元素内部创建一个独立的 DOM 子树,这个子树的样式和行为都被隔离在一个封闭的环境中,不会与外部的页面发生冲突。Shadow DOM 的概念旨在提供一种更强大的封装性,使开发人员能够构建独立的、可重用的 Web 组件,而不必担心样式和脚本冲突。

Shadow DOM(影子DOM)的特点
  1. 隔离性:Shadow DOM 创建的子树是与外部页面隔离的,子树内部的样式和脚本不会影响外部,反之亦然。这样可以防止组件的样式和行为影响到整个页面,同时也可以防止页面的样式和脚本影响到组件。
  2. 作用域样式:Shadow DOM 内部可以使用普通的 CSS 样式,但这些样式仅对 Shadow DOM 内部的元素生效,不会影响外部的元素。这意味着你可以在组件内部自由地编写样式,而不必担心它们会影响到其他部分。
  3. 封装性:Shadow DOM 允许你封装组件的结构和样式,使其在外部只是一个包含一个元素的容器,而内部的细节被隐藏起来。这有助于创建更干净、可维护的代码。
  4. 事件封装:Shadow DOM 可以封装事件,使得在组件内部处理事件,不需要担心与外部的事件监听器冲突。
  5. 局部脚本:Shadow DOM 内部的脚本代码也是隔离的,不会影响到外部脚本的执行环境。
  6. 主机元素:每个 Shadow DOM 都有一个关联的主机元素,它是外部 DOM 中的一个元素,Shadow DOM 会附加到这个主机元素上。

Real DOM, Virtual DOM, Shadow DOM,之间的区别

特点Real DOMVirtual DOMShadow DOM
意义浏览器中的实际文档对象模型内存中的虚拟 DOM 复制品创建独立、隔离的 DOM 子树
更新方式直接操作真实 DOM通过比较和批量更新虚拟 DOM隔离的、自包含的 DOM 子树
性能优化性能开销较大优化 DOM 更新的性能开销提供样式和行为的封装环境
作用域样式不提供作用域样式通常用于优化性能提供作用域样式
封装性不提供封装性用于构建可重用组件提供组件封装和隔离
主要应用场景传统 Web 开发现代 JavaScript 库/框架可重用 Web 组件
实现技术浏览器提供的 DOM轻量级 JavaScript 对象浏览器提供的技术
  • 22
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zayyo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值