如何搞懂虚拟 DOM?看看这篇文章吧!

1. 什么是虚拟 DOM?

虚拟 DOM,英文为Virtual Document Object Model,是运用JSX语法,将数据转换为虚拟节点,再通过虚拟节点构建一个类似于真实 DOM 树的结构,在每次数据更新时,虚拟 DOM 会检测到数据的变化,自动计算出最少且必要的节点操作,然后将这些节点操作一次性地应用到DOM树中,从而减少DOM操作次数,优化页面性能。

虚拟 DOM 的思想最早在2009年提出,但是真正流行起来,是由React的推崇和普及带动的。目前,Vue、Angular等框架也都采用虚拟 DOM 技术。

2. 虚拟 DOM 的优势

2.1 减少 DOM 操作

DOM 操作是非常昂贵的,每次操作都会破坏页面结构,重新渲染整个页面,严重影响页面性能。而虚拟 DOM 通过计算出最优节点操作,减少了真实 DOM 操作次数,优化了页面性能,提高了用户体验。

2.2 跨平台应用

由于虚拟 DOM 是基于JSX语法构建的虚拟节点树,而JSX语法是与语言无关的标记语言,具有高适应性和跨平台性,因此,通过虚拟 DOM 实现的组件可以方便地应用于多平台、多技术栈的应用中。

2.3 开发便捷

虚拟 DOM 将页面结构和页面数据分离,更好地实现了MVC的分层设计思想,提高了代码的可维护性和可读性,同时也为开发者提供了一种更便捷的操作方式,通过组件的方式构建复杂的页面结构,简化了页面开发流程,提高了开发效率。

3. 虚拟 DOM 的实现原理

虚拟 DOM 的实现原理主要可以分为Virtual DOM节点树的生成、Virtual DOM节点树的比较和Virtual DOM的渲染三个过程。

3.1 Virtual DOM节点树的生成

Virtual DOM 节点树的生成是通过JSX语法,将数据转换成Virtual DOM节点树,代码示例如下:

const virtualDom = (

<div id="root">

<h1>Hello, World!</h1>

<p>这是一段文本。</p>

</div>

);

上述代码通过JSX语法,生成了一个Virtual DOM节点树对象,其中的元素与属性与真实 DOM 树中保持一致。Virtual DOM 节点树与真实 DOM 树相比,是轻量级的,不依赖于浏览器渲染。

3.2 Virtual DOM节点树的比较

当更新数据时,虚拟 DOM 会对新旧节点树进行比较,找出新增、变更、删除以及复用的节点。

节点比较的过程大致分为以下几步:

1. 首先比较节点类型是否相同。如果不同,直接替换节点。

2. 如果节点类型相同,那么会继续比较节点上的属性,如果属性不同就替换节点。

3.如果节点类型和属性都相同,那么就继续比较它的子节点。

上述过程中,如果节点不同,那么就会在新的 Virtual DOM 树中生成一个新节点,反之,则重复使用旧节点。这样就大大减少了 DOM 操作,提升了页面的性能。

3.3 Virtual DOM的渲染

在节点比较的过程中,虚拟 DOM 只是对节点进行了计算,而没有操作真实的 DOM 树。当比较完成以后,虚拟 DOM 会根据计算结果,只对需要更新的节点进行操作,更新真实的 DOM 树。

更新真实 DOM 的过程,可以通过 diff 算法,将需要更新的操作尽可能地批量处理,同时尽可能地减少 DOM 操作。

4. 虚拟 DOM 的适用场景

虚拟 DOM 主要应用于数据变化较为频繁的单页应用中,特别是在线编辑器、数据可视化等大型应用中。

由于数据的频繁更新,真实 DOM 的操作次数也会随之增加,对页面的性能和用户体验造成重大影响。采用虚拟 DOM 技术,则可以优化页面性能,提高用户体验。

5. 结论

虚拟 DOM 技术的诞生,为前端开发带来了极大的便利和福利,其减少 DOM 操作、跨平台应用、开发便捷等优势,使其在单页应用开发中得到了巨大的应用和推广。

通过了解虚拟 DOM 的实现原理和适用场景,开发者可以更好地使用虚拟 DOM 技术,提高页面性能,为用户带来更好的体验。