什么是虚拟dom,说一下react和vue的diff算法

news/2024/7/17 4:38:18

什么是虚拟dom

组件第一次渲染的时候会生成一个虚拟dom和一个真实的dom然会会把真实的dom渲染到页面上
如果这个组件受到响应式数据变化的影响,需要重新渲染时,它仍然会重新调用render函数,创建一个新的虚拟dom树,这时会用新虚拟dom树(newVnode)和旧虚拟dom树(oldVnode)进行对比,通过比对,找到最小更新量,然后更新必要的虚拟dom节点,最后,这些更新过的虚拟节点会去修改它们对应的真实dom。这样一来就保证了对真实dom的操作达到了最小的改动。


react的diff算法

遵行三个原则:1.树的比较(tree diff)2.组建的比较(component diff)3.元素的比较(element diff)

1.树的比较
react会对比虚拟dom树和真实的dom树,对比他们的同一层级,对比时如果存在虚拟dom没有的节点而真是dom有就会删除这个节点,如果虚拟dom有真是dom没有就会创建这个节点,此过程只有只有删除和创建操作

注意:
但是如果DOM节点出现了跨层级操作,diff会如何处理?
就是A节点下面的b节点移动到了D的节点下,这时react会删除A节点下的b节点然后再D节点下创建b节点


2.组件的比较
如果是同一个类的组件,则会继续往下diff运算,如果不是一个类的组件,那么直接删除这个组件下的所有子节点,创建新的


3.元素的比较

如果存在key的话react就会对比key一样的新旧集合,没有的话只能按顺序比较,这也是为什么加key能够优化性能,如果存在一个列表,把第一个li移动到最后一个li下面,如果不存在key后续li都会更新存在key的话只要把第一个移动到最后就行,其他节点都不会更新

react会记录旧集合的索引,比如交oldindex,来回记录一个索引,他代表再就集合中已经对比过的元素在旧集合中最大的索引,比如叫maxindex,他们有一个移动规则,当oldIndex>maxIndex时,将oldIndex的值赋值给maxIndex,当oldIndex=maxIndex时,不操作,当oldIndex<maxIndex时,将当前节点移动到index的位置(新集合的下标),还会整体遍历老集合中节点,看有没有没用到的节点,有的话,就删除


详细的看:
https://vue3js.cn/interview/React/diff.html#%E4%B8%89%E3%80%81%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9

https://blog.csdn.net/qq_36407875/article/details/84965311


http://lihuaxi.xjx100.cn/news/295597.html

相关文章

Microsoft SQL Server 图书管理数据库的建立

文章目录题目描述创建数据库使用数据库创建三个表外码的表示形式结果展示题目描述 – 新建 “图书管理数据库" – 其中包含三个关系 – 图书&#xff08;编号&#xff0c;图书名&#xff0c;作者&#xff0c;出版社&#xff0c;类型&#xff0c;单价&#xff09; – 借阅…

Ansys Zemax | 使用 OpticStudio 进行闪光激光雷达系统建模(中)

在消费类电子产品领域&#xff0c;工程师可利用激光雷达实现众多功能&#xff0c;如面部识别和3D映射等。尽管激光雷达系统的应用非常广泛而且截然不同&#xff0c;但是 “闪光激光雷达” 解决方案通常都适用于在使用固态光学元件的目标场景中生成可检测的点阵列。凭借具有针对…

Linux NTP时间同步服务、NFS网络文件共享存储服务

目录 NTP服务 ntp服务器的安装 ntp时间同步的配置 同步性测试 ntpd和ntpdate的区别 国内常用的NTP服务器地址和IP NFS 服务 NFS原理图​编辑 NFS配置 nfs的优缺点 优点&#xff1a; 缺点&#xff1a; NTP服务 NTP服务器【Network Time Protocol&#xff08;NTP&#xff…

Python 利用4行代码实现图片灰度化

背景 不论是在进行深度学习时的图片处理&#xff0c;还是在商业用途出版书刊&#xff0c;基本都会用到对图片进行灰度转换&#xff0c;也就是灰度化&#xff0c;本文章利用简单的4行代码来快速实现图片灰度化&#xff0c;仅供参考 效果 实现代码 from PIL import Image wech…

代码随想录算法训练营第四十九天|121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

LeetCode 121. 买卖股票的最佳时机 链接&#xff1a;121. 买卖股票的最佳时机 思路&#xff1a; 这道题目用动规写起来效率其实是不如贪心的&#xff0c;但是对于解类似的题目还是有帮助&#xff0c;重点是理解动规的过程。首先定义下标&#xff1a;dp[i][0]表示第i天持有股…

Windows8系统下DOSBox编译、链接、执行汇编语言步骤

下载安装好DOSBox后&#xff0c;同时下载debug、link、masm程序。 &#xff08;1&#xff09;建立工作目录&#xff0c;编写汇编语言源文件&#xff0c;并将debug、link、masm程序放在同一目录下。&#xff08;下图中ass.asm是汇编语言源文件&#xff09; &#xff08;2&#x…

【学习笔记】深度学习入门:基于Python的理论与实现-误差反向传播法

CONTENTS五、误差反向传播法5.1 计算图5.2 链式法则5.3 反向传播5.4 简单层的实现5.5 激活函数层的实现5.6 Affine/Softmax层的实现5.7 误差反向传播法的实现五、误差反向传播法 5.1 计算图 先引入一个很简单的问题&#xff1a;在超市买了222个100100100元一个的苹果&#xf…

Kafka 开发架构的一些问题汇总

一、Kafka 存在哪些方面的优势 1. 多生产者 可以无缝地支持多个生产者&#xff0c;不管客户端在使用单个主题还是多个主题。 2. 多消费者 支持多个消费者从一个单独的消息流上读取数据&#xff0c;而且消费者之间互不影响。 3. 基于磁盘的数据存储 支持消费者非实时地读取…