一、响应式原理的异同Vue2使用Object.defineProperty的get和set实现响应式,数组对象通过添加劫持原型get和set来实现。Vue3的ref使用Object.defineProperty的get和set实现响应式(数据劫持),reactive使用Proxy的get、set、deleteProperty实现响应式,通过Reflect对源对象内部的数据进行操作。1.ref用于定义基本类型数据。2.reactive用于定义对象或数组类型的数据。3.ref也可以用来定义对象或者数组类型的数据,在内部会通过reactive转换为代理对象。二、diff算法的异同点:1.VirtualDOM在比较时只比较同一层次的节点,复杂度为O(n),降低了算法的复杂度。2.两者都使用key来比较是否是同一个节点,都是为了尽可能复用节点。3、既操作虚拟DOM,又最小化操作真实DOM,提高性能(其实虚拟DOM的优势不在于操作DOM快)。4.不要使用索引作为键。不同点:1.Diff算法遍历节点方向:React只向右移动,Vue2将两端移动到中间,Vue3在Vue2的基础上增加了最长增量子序列的算法优化。2、diff算法比较变量:vue维护了四个变量:oldStartIdx=>oldheadindexoldEndIdx=>oldtailindexnewStartIdx=>newheadindexnewEndIdx=>newtailindex同时比较两个方向,真正的DOM是从新职位获得;如果旧的先完成,则添加它;如果新的先完成,deletereact维护三个变量:1.nextIndex=>遍历nextChildren时的索引,每遍历一个元素加1(遍历新节点)2.lastPlacedIndex=>这个元素在prevChildren中的索引(对应newnode)元素上次从prevChildren中取出时3.oldIndex=>元素在数组中的位置(对应old节点)节点移动的前提是:oldIndex
