vue的diff算法原理

news/2024/11/17 0:41:38/

  • diff 概念
  • diff比较流程
    • 头头
    • 尾尾
    • 头尾
    • 尾头
    • 比对查找
    • 过程
  • 与vue3的区别

diff 概念

vue基于虚拟DOM做更新,diff的核心就是比较两个虚拟节点的差异。
vue的diff算法是平级比较,不考虑跨级比较的情况。内部采用深度递归+ 双指针的方式进行比较

在这里插入图片描述

diff比较流程

  1. 先比较是否是相同节点 key tag (标识,标签名)
  2. 相同节点比较属性,并复用老节点(将老的虚拟dom复用给新的虚拟节点dom)
  3. 比较儿子节点,考虑老节点和新节点儿子的情况
      1. 老的没儿子,现在有儿子。直接插入新的儿子
      1. 老的有儿子,新的没儿子。直接删除页面节点
      1. 老的儿子是文本,新的儿子是文本,直接更新文本节点即可
      1. 老的儿子是一个列表,新的儿子也是一个列表 updateChildren – 核心的diff算法,化为数组比对
  4. 列表优化比较(对于列表的情况,updateChildren)

头头尾尾尾头头尾比对查找

头头

先看头指针和头指针,若相同则头指针同时往右移,直到上方的头尾重合遍历完成,把下方的D 直接拿上来
在这里插入图片描述

尾尾

如果头指针和头指针不一样,再看尾指针和尾指针,若相同则尾指针同时往左走,知道上方的头尾重合遍历完成,把下方的D直接拿上来
在这里插入图片描述

头尾

如果头指针和头指针不一样,且尾指针和尾指针不一样,再看头指针和尾指针,若相同则把头指针插到尾指针的后面,头指针往后移,尾指针往前移,—之后再按照 头头,尾尾,头尾,尾头,直到遍历完成
在这里插入图片描述

尾头

如果头指针和头指针不一样,且尾指针和尾指针不一样,头指针和尾指针不一样,,再看尾指针和头指针,若相同则把尾指针插到头指针的前面,尾指针往前移,头指针往后移,—之后再按照 头头,尾尾,头尾,尾头,直到遍历完成
在这里插入图片描述

比对查找

如果头头,尾尾,头尾,尾头都不成立,就会通过对比查找的方式,若下面的头指针的元素,在上面中存在,则会把上面元素的放到头指针前面,下面头指针往后移,上面头指针不变,–之后再按 头头,尾尾,尾头,头尾,对比查找,直到遍历完成
在这里插入图片描述

过程

在这里插入图片描述

与vue3的区别

vue采用的 最长递归序列法 来实现 diff 优化


http://www.ppmy.cn/news/53219.html

相关文章

算法训练 | Day41动态规划

343. 整数拆分 思路: 确定dp数组(dp table)以及下标的含义:dp[i]:分拆数字i,可以得到的最大乘积为dp[i]。 确定递推公式:dp[i] max(dp[i], max((i - j) * j, dp[i - j] * j)) 可以想 dp[i]最…

【前端笔记】前端包管理工具和构建打包工具介绍之npm、yarn、webpack、vite

一、NPM包管理工具 1.1、什么是NPM NPM(Node Package Manager)是node包管理器,是node.js默认采用的软件包管理系统,使用JavaScript语言编写。包管理可以理解为依赖管理,有一个npm包管理仓库,当我们执行np…

UML--类图--软件工程系统学习-- idea查看类图-类关系图

文章目录 什么是类图类图的用途类图的组成 类什么是类类符号类关系依赖(Dependence)idea查看依赖 关联关系(association)继承/泛化idea查看继承 实现(realization)聚合组成组合和聚合之间的差异 类图详解id…

“量子+生成式AI”!IBM联合生物制药公司Moderna进行疫苗研究

​ (图片来源:网络) 4月20日,以COVID-19疫苗而闻名的生物技术和制药公司Moderna Inc.表示,宣布正在与IBM公司合作,利用量子计算和生成式人AI探索推进研究mRNA技术的方法。 双方签署了一项协议,允…

Vue组件-非单文本组件

非单文本组件(用的少) 在vue中,组件是有两种编写格式的,第一种格式叫非单文本组件,第二种格式叫单文本组件 非单文本组件:一个文件中含有多个组件,也叫多文本组件,比如demo.html里面包含js,css… 单文本…

blast的-max_target_seqs?

Shah, N., Nute, M.G., Warnow, T., and Pop, M. (2018). Misunderstood parameter of NCBI BLAST impacts the correctness of bioinformatics workflows. Bioinformatics. 杂志Bioinformatics以letter to the editor的形式刊发了来自美国马里兰大学计算机系的Nidhi Shah等人…

Windows子系统保存位置更改释放C盘(最简单)

Windows子系统保存位置更改 目录 使用场景解决思路操作流程关闭子系统找到文件存放地址新的路径文件迁移创建链接 使用场景 使用WSL(Linux子系统)做深度学习开发,在微软的应用商店安装的Ubuntu22.04会将系统默认安装在C盘,随着使用时间测增长&#xff…

springmvc jpa 多数据源

本次使用Mysql 和 sqlServer 一 POM 版本大家自己换一下 <!-- JPA --><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-commons</artifactId><version>1.13.13.RELEASE</version></d…