VUE虚拟DOM以及diff算法及key的好处

VDOM

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

真实DOM的代码:

<div>
  <p>文本段</p>
</div>

VDOM的伪代码:

var Vnode = {
   
  tag: 'div',
  children: [{
   
    tag: 'p',
    text: '文本段'
  }]
}

为什么要引入虚拟DOM?
解决浏览器性能问题,减少重排,提高性能。

先了解一下浏览器渲染页面的流程。

浏览器渲染页面的流程

(1)HTML被HTML解析器解析成DOM Tree,CSS被CSS解析器解析成CSSOM Tree。(并行解析)
(2)DOM Tree和CSSOM Tree合并到一起,形成了render Tree(渲染树)。

重排:节点信息计算,即根据渲染树计算每个节点的几何信息(大小及位置)。
重绘:渲染绘制,即根据计算好的信息绘制整个页面,渲染出最终的页面。
前端性能优化——重排重绘.

总结: 每次真实 DOM 发生改变引起重排都会将上面的流程跑一遍,而重排过程特别是计算节点信息是非常消耗性能的,于是我们引入VDOM,在VDOM上进行的操作不会引起重排,然后再通过diff算法比较新VDOM(修改之后的)和旧 VDOM(修改前的)的不同从而去更新真实DOM(patch方法)。

注意: 特别要提一下 Vue 的 patch 是即时的,并不是打包所有修改最后一起操作DOM(React则是将更新放入队列后集中处理),这样岂不是相当于没有优化?实际上现代浏览器对这样的DOM操作做了优化,所以表现出来的结果是一样的,即减少的操作真实DOM的次数,达到减少重排,提高性能的目的。

VDOM操作

Vue在进行DOM渲染时,出于性能考虑,会尽可能的复用已经存在的元素,而不是重新创建新的元素。
所以呢,VUE先在内存建一个虚拟DOM(Virtual DOM,简写VDOM),先把需要渲染的DOM元素放在这里,然后再放到浏览器上。
VDOM存放DOM元素是这样的,它将近似的元素进行复用,而不是重新创建一个元素,所以当浏览器需要用到两个近似的DOM元素时,其实用的是同一个DOM元素,只是有些属性值会进行对比修改。

看一个小案例:

<div id="app">
  <span v-if="isUser">
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vue2diff算法Vue.js框架内部实现的一种用于比较虚拟DOM树并进行高效更新的算法。在Vue.js中,当数据发生变化时,会重新生成一个新的虚拟DOM树,并与之前的虚拟DOM树进行比较,然后通过diff算法找出二者之间的差异,最终将差异应用到真实的DOM树上。 vue2diff算法的核心是基于双指针遍历两棵树的方式进行差异比较,它主要有以下几个步骤: 1. 首先,从根节点开始遍历新旧虚拟DOM树,对比节点类型和key值是否相同。 2. 如果节点类型不同,直接替换旧节点。 3. 如果节点类型相同,则继续对比节点的属性、样式等是否相同,如果不相同,则更新节点的属性、样式等。 4. 如果节点类型相同且节点属性相同,继续递归对比节点的子节点。 5. 如果新的虚拟DOM树有多余的节点或旧的虚拟DOM树有多余的节点,就删除或插入对应的节点。 6. 根据差异生成一个补丁(Patch)对象,包含了需要进行删除、插入、更新等操作的DOM节点信息。 7. 将补丁对象应用到真实的DOM树上,完成更新操作。 keyvue2diff算法中的一个重要概念,用于优化算法的效率。在对比新旧虚拟DOM节点时,如果节点的key值相同,则直接复用旧的DOM节点,而不需要重新创建。这样可以减少创建和销毁节点的开销,提高页面的渲染性能。 总之,vue2diff算法通过差异比较和局部更新的方式,使得Vue.js框架能够高效地处理大规模的数据变化,并保证页面的渲染效果与数据变化保持同步。同时,通过使用key值,可以更好地管理和复用DOM节点,提升页面的渲染性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值