Vue2中的双端diff算法缺陷

 对于这样的diff操作,首先对于e节点进行双端比对,结果是匹配不到,新建e节点到头部;然后指针后移到b,继续进行双端比对,比对不到,然后拿着b节点去找,找到有相同的b节点,然后将b节点移动到前面;然后指针继续后移,c节点进行双端比对,同b节点......

但是,对于旧列表 bcd 节点,新列表中也是 bcd 节点,我们其实完全不用去移动 bcd 节点的,我们只需要将a节点移动到后面来就可以了~

所以再vue2中的diff算法,它会去找这个节点,如果可以复用,那么就会产生移动。所以缺点就在于vue2的diff算法它没有去关注哪些节点不用去移动,这样就会产生额外的移动操作。

vue3中就采用了最长递增子序列的思想,尽可能少移动节点,减少无意义的移动!

而且vue2diff算法采用的是递归比对(浪费性能),能否只比较动态的节点,非动态的节点就不比较了,vue3在模板编译的时候会标记,哪些是动态节点,只比较动态节点!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值