vue3.0 diff算法详解(超详细)

Posted 前端Sharing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue3.0 diff算法详解(超详细)相关的知识,希望对你有一定的参考价值。


前言:随之vue3.0beta版本的发布,vue3.0正式版本相信不久就会与我们相遇。尤玉溪在直播中也说了vue3.0的新特性typescript强烈支持,proxy响应式原理,重新虚拟dom,优化diff算法性能提升等等。小编在这里仔细研究了vue3.0beta版本diff算法的源码,并希望把其中的细节和奥妙和大家一起分享。



首先我们来思考一些大中厂面试中,很容易问到的问题:

vue3.0 diff算法详解(超详细)

1 什么时候用到diff算法,diff算法作用域在哪里?

2 diff算法是怎么运作的,到底有什么作用?
3 在v-for 循环列表 key 的作用是什么?
4 用索引index做key真的有用?到底用什么做key才是最佳方案?


如果遇到这些问题,大家是怎么回答的呢?我相信当你读完这篇文章,这些问题也会迎刃而解。


1 什么时候用到了diff算法,diff算法作用域?


1.1diff算法的作用域



patch概念引入

在vue update过程中在遍历子代vnode的过程中,会用不同的patch方法来patch新老vnode,如果找到对应的 newVnodeoldVnode,就可以复用利用里面的真实dom节点。避免了重复创建元素带来的性能开销。毕竟浏览器创造真实的dom,操纵真实的dom,性能代价是昂贵的。

patch过程中,如果面对当前vnode存在有很多chidren的情况,那么需要分别遍历patch新的children Vnode和老的 children vnode


存在chidren的vnode类

首先思考一下什么类型的vnode会存在children。


①element元素类型vnode

第一种情况就是element类型vnode 会存在 children vode,此时的三个span标签就是chidren  vnode情况

<div>  <span> 苹果

以上是关于vue3.0 diff算法详解(超详细)的主要内容,如果未能解决你的问题,请参考以下文章

Vue面试必问虚拟dom和diff算法,一次解决

详解vue的diff算法

React的diff算法详解

数据结构KMP算法配图详解(超详细)

数据结构和算法超多图解,超详细,堆详解

数据结构和算法超详细,超多图解,赫夫曼树详解