一篇文章教会你如何将DOM转换为virtual DOM

简介: 一篇文章教会你如何将DOM转换为virtual DOM

【一、Virtual DOM简介】

Virtual DOM是虚拟节点,它通过Javascript的Object对象模拟DOM中的节点,然后通过特定的render方法将其渲染成真实的DOM节点。

浏览器在处理DOM时,总会附加很多属性,这会使得每一次数据更新,渲染很慢。

Virtual DOM利用Javascript做了中间层,Javascript记录状态,将每一次状态中的变化同步到视图中。

【二、virtual DOM的优点】

  1. 保证性能下限,以及跨平台。
  2. 无需手动操作DOM,只需要写好 View-Model 的代码逻辑,框架会根据虚拟DOM和数据双向绑定,帮我们以可预期的方式更新视图,极大提高我们的开发效率。
  3. 虚拟DOM的核心思想是:对复杂的文档DOM结构,提供一种方便的工具,进行最小化的DOM操作,这句话,也许过于抽象,却基本概况了虚拟DOM的设计思想。

【三、项目实施】

首先我们来简单的模拟vue是如何生成虚拟DOM的,超简版!!!
一篇文章教会你如何将DOM转换为virtual DOM

是否有点眼熟呢!没错,在使用Vue搭建的脚手架里面的main.js文件里面包含了这个代码块,接下来我们需要对我们new出来的Vue对象进行处理。

一篇文章教会你如何将DOM转换为virtual DOM

我们将基于Class VNode 这个类进行实现,如下图所示:

一篇文章教会你如何将DOM转换为virtual DOM

tag代表的是标签;

data代表的是属性;

value代表的值;

type代表的是类型;

children代表的是子级。

虚拟DOM 转换代码如下:
一篇文章教会你如何将DOM转换为virtual DOM

现在分析一下转换的过程:

1.先理解nodeType代表的是什么?

nodeType为1则代表元素,nodeType为3则代表文本。

2.当nodeType==1的情况下反过来再看看class VNode的构造函数需要的是什么?

需要什么我们就从DOM身上拿,nodeName代表标签、_propertyObj代表属性、nodeType代表类型元素身上是没有文本的(因为nodeType为1代表元素,nodeType为3代表文本,当前的nodeType==1所以没有文本,代表元素),所以value这个字段直接传undefined。

3.把new出来的对象实例赋给_vnode,紧接着拿出当前元素的所有子元素 进行遍历递归写入_vnode中的children。

4.元素的处理结束了,nodeType==3 的情况下既然是文本肯定没有标签以及属性所以直接传undefined值则用node.nodeValue取,同样nodeType也代表类型,每次递归进来会对不同类型做不同的处理。
一篇文章教会你如何将DOM转换为virtual DOM

【四、总结】

  1. 前端热门框架Vue,React都使用了virtual DOM,其目的之一是为了提高性能,了解如何将DOM转换为virtual DOM,就是在学习Vue的底层原理。
  2. Vue中的diff算法就是将DOM树同级进行对比,学习virtual DOM就是学习diff算法的前置知识点。
  3. 虽然这个知识点在平常的开发中几乎不会用到,但是其中包含的思想确实值得我们学习的,走马观花不是学习,多想多练才是,希望对您有所帮助!
相关文章
|
1月前
|
JavaScript 前端开发 算法
js开发:请解释什么是虚拟DOM(virtual DOM),以及它在React中的应用。
虚拟DOM是React等前端框架的关键技术,它以轻量级JavaScript对象树形式抽象表示实际DOM。当状态改变,React不直接操作DOM,而是先构建新虚拟DOM树。通过高效diff算法比较新旧树,找到最小变更集,仅更新必要部分,提高DOM操作效率,降低性能损耗。虚拟DOM的抽象特性还支持跨平台应用,如React Native。总之,虚拟DOM优化了状态变化时的DOM更新,提升性能和用户体验。
24 0
|
4月前
|
XML JavaScript 前端开发
React中 Real DOM 和 Virtual DOM 的区别?优缺点?
React中 Real DOM 和 Virtual DOM 的区别?优缺点?
44 0
|
4月前
|
JavaScript 前端开发 算法
React中的Virtual DOM(看这一篇就够了)
React中的Virtual DOM(看这一篇就够了)
165 0
|
4月前
|
JavaScript 前端开发 算法
Virtual DOM
Virtual DOM
17 0
|
8月前
|
JavaScript 前端开发
说说Real DOM和Virtual DOM的区别?优缺点?
在页面渲染出的每个节点都是一个真实的DOM结构
|
8月前
|
JavaScript 前端开发
【DOM】Real DOM与Virtual DOM
【DOM】Real DOM与Virtual DOM
40 0
|
8月前
|
JavaScript 前端开发
Real DOM 和 Virtual DOM比较
Real DOM 和 Virtual DOM比较
52 0
|
9月前
|
XML JavaScript 前端开发
深入理解Virtual DOM的工作原理
虚拟DOM(Virtual DOM)是前端开发中的一个重要概念,它是用于提高页面渲染性能和优化开发体验的技术。理解虚拟DOM的工作原理对于前端开发者来说至关重要。在深入理解虚拟DOM的工作原理之前,让我们先了解一下DOM和Virtual DOM的基本概念。
|
XML 移动开发 JavaScript
Virtual Dom & JSX
Virtual Dom & JSX
44 0
|
JavaScript 算法 前端开发
Virtual DOM到底有什么迷人之处?如何搭建一款迷你版Virtual DOM库?
Virtual DOM到底有什么迷人之处?如何搭建一款迷你版Virtual DOM库?
Virtual DOM到底有什么迷人之处?如何搭建一款迷你版Virtual DOM库?