1.什么是虚拟DOM?
虚拟DOM就是用普通的js来描述的一种DOM结果,因为不是真实的DOM,所以称之为虚拟DOM。
2.什么是diff算法?
diff算法是一种对比算法,用来对比新旧虚拟DOM,从而最小程度的更新视图。
没有用到key的diff算法:假设我们有一个数组【A,B,C,D,E】,在索引为2的地方插入‘DDD’,那么新的数组就为【A,B,C,DDD,D,E】,看了diff算法的源码,大致上就是虚拟DOM会有一个新的vNode和旧的vNode,然后新旧vnode会进行一个替换,新增和删除,性能不是特别高。
3.循环中key的作用?
循环中key的作用就要和diff挂钩了,在diff算法中有了key的作用,性能会大大提高,还是原来的虚拟DOM产生新旧的vNode,但是因为有key,他会给每一个数据一个唯一的标识,通过前序对比和后续对比,再进行新增和删除,就不会出现覆盖替换的情况了,(当然还有一种特殊情况就是乱序的,就需要用到最长递增子序列算法(贪心法+二分法))。