vue和react diff算法的区别

先说结论:

相同点:

1、都是通过两组虚拟DOM的对比,根据差异进行更新

2、react和vue只对比同级节点,忽略跨级比较

3、都是用key作为唯一标识,进行查找

4、遍历前都会根据老节点构建map,方便根据key快速查找

不同点

1、虽然react和vue都是只对比同级节点;但如果className不同,即使节点元素相同vue也认为是不同类型的元素,会选择删除构建;而react则仍认为是相同节点,只是修改节点的属性

2、vue是双指针模式,采用双端对比,从两端到中间对比的方式;而react由于是单指针Fiber单链表模式,从左到右依次对比

什么是diff算法

diff算法是一种对比算法,对比的对象是新旧的虚拟DOM,通过找到新旧虚拟DOM之间的差异来更新真实DOM

虚拟DOM:用来描述真实DOM的js对象,虚拟DOM是解决频繁操作真实DOM影响性能的一种解决方案;通过提供一种简单的对象去替代负责的DOM对象结构,从而优化DOM操作

传统的的diff算法是通过递归深度遍历虚拟DOM,而且不分层级;所react和vue进行了仅同级比较等优化

番外篇:vue2和vue3 diff算法的差异

1、虚拟DOM优化:vue2 diff算法是针对整个虚拟DOM树进行完整的比较;而vue3则是通过静态分析和标记,将组件标记为静态组件动态组件;当更新DOM是,静态组件会直接复用,只对动态节点进行对比更新,从而减少diff对比次数

2、vue2每次更新都会重新设置事件监听器,存在一定的损耗;而vue3通过缓存和重用事件侦听器,从而提高了事件的处理效率

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容