vue的diff算法

Vue通过virtual DOM实现高效更新,数据变化时先构造vNode,然后进行Diff算法比较,同级比较时考虑key值,减少DOM操作。与React的Diff算法区别在于节点类型判断、列表比对策略,Vue在某些情况下更高效。
摘要由CSDN通过智能技术生成

数据变化时vue进行节点更新

问题:有时修改了某个数据,如果直接渲染到真实 DOM 上会引起整个 DOM树的重绘和重排。
解决:先根据真实 DOM 生成一颗 virtual DOM,计算 virtual DOM 中节点数据变化的部分,将该部分进行原生 DOM 操作,而不用重新渲染整个页面。

virtual DOM

用 js 对象结构表示 DOM 树的结构,然后用这个树构建一个 真正的 DOM 树,插入到文档当中。当状态变更的时候,重新构造一棵新的对象树。然后用新的树和旧的树进行比较,记录两棵树的差异。把所记录的差异应用到所构建的真正的 DOM 树上,视图就更新了。Virtual DOM 本质上就是在 js 和 DOM 之间做了一个缓存。
生成 vNode ——> 渲染成真实节点 ——> 挂载到页面 ——> diff 比较

Diff 算法

针对具有相同父节点的同层新旧子节点进行比较,而不是使用逐层搜索递归遍历的方式。时间复杂度为O(n)。

同级比较

比较时,先比较相同节点是否都有子节点,若有继续向下比较是否有子节点,直到没有子节点,进行同级比较,然后返回上一层继续进行同级比较。

同级比较

如果节点类型不同,直接删掉此节点,再创建并插入新的节点,不会再比较这个节点以后的子节点了。 如果节点类型相同,则会重新设置节点的属性࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值