答题思路
1:虚拟DOM
Vue不可以直接操作DOM结构,通过数据驱动、指令等机制间接操作DOM结构。修改模版中的数据时,Vue会触发重新渲染过程,调用render函数,返回一个虚拟DOM树。
2:DIFF算法
Vue讲新生成的新虚拟DOM与上一次渲染时生成的旧虚拟DOM进行比较,对比出哪个虚拟节点更改,找出虚拟节点,只更新这个虚拟节点所对应的真实节点,不用更新其他数据没发生改变的节点。
diff算法过程
-
新旧虚拟DOM对比的时候,Diff 算法比较只会在同层级进行,不会跨层级比较。
-
首先比较两个节点的类型,如果类型不同,则废弃旧节点并用新节点替代。
-
对于相同类型的节点,进一步比较它们的属性。记录属性差异,以便生成相应的补丁。
-
如果两个节点相同,继续递归比较它们的子节点,直到遍历完整个树。
-
如果节点有唯一标识,可以通过这些标识来快速定位相同标识的节点。
-
如果节点的相同,只是顺序变化,不会执行不必要的操作。