vue中diff算法理解

本文介绍了虚拟DOM的概念以及Vue.js中的diff算法。diff算法用于比较新的虚拟DOM和旧的虚拟DOM,找到差异并生成补丁,以最小的代价更新DOM。文章详细描述了diff过程中的节点比较、同级比对以及key值优化等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

了解diff算法前我们需要先了解什么是Virtual

一.什么是Virtual DOM(虚拟DOM)

Virtual DOM(虚拟DOM)是Real DOM(真实DOM)的JS对象 我们看下图方便理解

在这里插入图片描述(不会画图 只能借鉴一下了)
虚拟DOM 就把是 真实DOM的 标签名和标签属性和子标签以及文本节点 都以js的对象的样式呈现

二.了解diff算法

diff算法(个人简单理解):diff算法会将 新的虚拟DOM 和 旧的虚拟DOM 进行对比 找出差异 将差异封装为补丁(如果存在无差异的虚拟节点,旧虚拟节点将会得到复用),通过方法的循环遍历然后打到 真实DOM 上,以差异化最小的代价去操作DOM,
先上图

在这里插入图片描述图中标注的真实DOM对应右边虚拟DOM
一旦我改变真实DOM的文本内容 就会生成一个新的虚拟DOM(切记如果修改真实DOM文本后 就会立即执行deff算法 以最小化进行更新视图)
请添加图片描述diff算法本质就是找出新旧虚拟DOM的差异然后最小化的对视图进行更新

1.数据改变就会触发deff算法中setter方法 间接触发Dep.notify方法 然后通知到各使用方执行patch方法(patch方法就是比较新旧虚拟节点的差异 将差异包装成一个补丁 然后打在真实DOM所需要的地方)
2.首先执行isSameVnode判断这两个是否为同类标签如果不是同类标签则直接替换
3.如果是同类标签则执行patchVonde方法 先判断是新旧虚拟节点是否相同 相同则直接return
4.如果新旧虚拟节点不同 则分为4中情况 如图左侧所示
5.当oldvnode和newvnode都有子节点时 就会执行updataChildren updataChildren 使用同级比对 在同级比对时会采用首位指针法来对比子节点 每次oldvnode和newvnode子节点比对成功时 真实DOM的节点 以newvnode的子节点排序为标准 都会对真实DOM的节点进行操作 然后渲染到页面中(如下图这 这也就相当执行了大概4次DOM操作 3次innerText操作 1次creat和append的DOM操作 如果想减少DOM操作 那么我们就要用到key值操作了 key值操作我们下章再讲)
在这里插入图片描述
本笔记在该观看此视频获取灵感之后创作 可以点击进行观看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值