Vue原理-虚拟DOM和diff算法

本文探讨了虚拟DOM(VDOM)的概念,重点讲解了如何通过diff算法在JavaScript中高效地比较DOM变化。从源码解读到实际操作,涉及key在比较中的作用,以及如何利用VNode和patch函数进行DOM更新。
摘要由CSDN通过智能技术生成

vdom和diff

在这里插入图片描述

vdom

在这里插入图片描述

js模拟DOM

在这里插入图片描述

diff算法

在这里插入图片描述

diff算法概述

在这里插入图片描述
比较方式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

diff源码解读

  1. 处理DOM

  2. 返回vnode(包含老dom)
    在这里插入图片描述

  3. patch函数

在这里插入图片描述

path

如果是空的就创建一个新的再关联一下
在这里插入图片描述
如果tag和key都相同则这层不做比较:(都不传key也是相等的undefined)
在这里插入图片描述
不同直接删除重建:
在这里插入图片描述

pathVnode

设置生命周期通Vue:
同时设置新elm为旧的elm(告诉它该和谁比对)
在这里插入图片描述
判断时children还是test:
在这里插入图片描述
text对比:
在这里插入图片描述
有子节点时的对比:
在这里插入图片描述
都有时对比children:
在这里插入图片描述

updateChildren

二者子节点:
在这里插入图片描述
定义方式:
在这里插入图片描述
开始和开始结束和结束对比:对比条件为key和tag是否相同
在这里插入图片描述
开始和结束对标,结束和开始对比:
在这里插入图片描述
**比对后不一样拿当前新节点key和所有其他的key做对比,看是否相同
对应上了判断tag是否一样 否则直接插入新节点
在这里插入图片描述

之后指针进行累加:碰到一块则循环结束
在这里插入图片描述

不使用key和使用key(随机数也不可以)

用key可以直接做一个移动就好不用删掉重新插入
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值