浅浅分析一下下Vue的diff算法

104 阅读2分钟

一、前言

最近面试中遇到的问题,发现对比两年前有了更深的理解,比如某位面试官问我vue的diff算法,当场懵了,可能太久没面试了,一时不知如何组织语言了......就是知道有那么个东西,也知道怎么回事,却无法言说,天天写代码,也还管它啥子算法嘞。话虽如此,挂了电话,该查资料的查资料,该反思的反思......

二、Vue 的 diff 算法是什么

Vue中的diff算法是用来比较新旧虚拟DOM节点差异的算法。它的主要目的是尽可能少地操作DOM,以提高性能。

三、Vue 的 diff 算法基于的两个假设

1、组件的同级别子节点会具有稳定的标识符,可以通过 key 来进行比较。

2、不同类型的组件会产生不同的VNode结构,从而不会进行比较。

Vue 的 diff 算法分为哪几个步骤

1、新旧节点的比较:

首先比较新旧节点的标签名、属性、子节点等信息,如果有不同则进行下一步操作。

2、新节点的挂载:

如果新节点不存在,则直接删除旧节点;如果旧节点不存在,则直接添加新节点;如果两者都存在,则进行下一步操作。

3、子节点的比较:

对新旧节点的子节点进行递归比较,如果有差异则进行下一步操作。

4、子节点的挂载:

如果新节点的子节点存在,但旧节点的子节点不存在,则直接添加新节点的子节点;如果新节点的子节点不存在,但旧节点的子节点存在,则直接删除旧节点的子节点;如果两者都存在,则进行下一步操作。

5、子节点的移动:

如果新节点和旧节点的子节点都存在,但是它们的顺序不同,则进行移动操作。

总结

总而言之,Vue的diff算法是一个高效的算法,它尽可能地减少DOM操作,从而提高性能。