diff算法简析

diff算法的核心目的是用最少的步骤找出新旧节点的差异,从而更新视图。

diff算法是一种通过同层的树节点进行比较 的高效算法,探讨的是虚拟DOM树发生变化后,生成DOM树更新补丁的方式。对比新旧两株虚拟DOM树的差异,将更新补丁作用于真实DOM,以最小成本完成视图更新

原理:当数据发生改变时,set方法会调用Dep.notify通知所有订阅者watcher,订阅者就会调用patch给真实的DOM打补丁,更新相应的视图。

Vue 2的diff算法:双端指针比较法

Vue 2中采用的是双端指针比较法 。这种算法通过比较新旧节点的属性,找出需要更新的部分 。虽然效率不错但在处理复杂场景时可能会有些吃力

Vue 3的diff算法:最长递增子序列比较法

Vue 3在diff算法上做了改进,仍然使用双端比较法 ,但增加了最长递增子序列的比较方式 。这种方式在处理复杂场景时更加高效,能够减少不必要的计算

React的diff算法:向右移动的比较法

React的diff算法与Vue有所不同。它采用了一种向右移动的比较方法 ,通过比较新旧节点的键值对来找出差异 。这种算法在处理大型应用时表现优异但也有其局限性

patch函数和patchVnode函数

在前端开发中,patch函数和patchVnode函数 是常见的操作。patch函数用于将虚拟节点(vnode)与实际DOM元素进行绑定或更新。而patchVnode函数则用于处理虚拟节点之间的差异。

addVnodes和removeVnodes函数
addVnodes和removeVnodes函数 用于添加或移除虚拟节点。在更新视图时,这两个函数会根据新旧节点的差异来决定是否需要添加或移除节点。

updateChildren函数
updateChildren函数处理子节点更新的关键函数。它根据新旧节点的差异来更新子节点,确保视图的一致性。

相关推荐
互联网搬砖老肖31 分钟前
Selenium2+Python自动化:利用JS解决click失效问题
javascript·python·自动化
pink大呲花1 小时前
使用 Axios 进行 API 请求与接口封装:打造高效稳定的前端数据交互
前端·vue.js·交互
samuel9181 小时前
uniapp通过uni.addInterceptor实现路由拦截
前端·javascript·uni-app
泯泷1 小时前
JavaScript随机数生成技术实践 | 为什么Math.random不是安全的随机算法?
前端·javascript·安全
benben0441 小时前
Unity3D仿星露谷物语开发35之锄地动画
前端·游戏·游戏引擎
WebInfra2 小时前
🔥 Midscene 重磅更新:支持 AI 驱动的 Android 自动化
android·前端·测试
八了个戒2 小时前
「数据可视化 D3系列」入门第八章:动画效果详解(让图表动起来)
开发语言·前端·javascript·数据可视化
八了个戒2 小时前
「数据可视化 D3系列」入门第九章:交互式操作详解
javascript·信息可视化·数据可视化·d3
拉不动的猪3 小时前
无缝适配 PC 和移动端‌我们要注意哪些点呢
前端·javascript·面试
慵懒学者3 小时前
JavaWeb 1.HTML+CSS (黑马JavaWeb课程笔记)
css·笔记·html