diff算法深度解析(个人笔记)

简介:diff算法其实是一个通用的概念,用于比较两个文本或数据结构之间的差异

用途:对比新旧虚拟dom,来达到局部更新真实dom

核心算法:

     介绍根据需求使用不同的算法例如:

       (1)文本类(git等文本工具使用的LCS)

              1.最长公共子序列算法,通过把文件拆成字符,然后给他存在一个2*2规划表格,然后动态的填写这个表格,通过比较两个文本文件的每一行(或字符),根据相似度进行填充动态规划表格。如果当前行(或字符)匹配,则在表格中对应位置的值为左上角元素的值加1;如果不匹配,则取左方格和上方格中较大的值填充。

   |   | B | D | C | A | B |
  --|---|---|---|---|---|---|
    | 0 | 0 | 0 | 0 | 0 | 0 |
  A | 0 | 0 | 0 | 0 | 1 | 1 |
  B | 0 | 1 | 1 | 1 | 1 | 2 |
  C | 0 | 1 | 1 | 2 | 2 | 2 |
  B | 0 | 1 | 1 | 2 | 2 | 3 |
  D | 0 | 1 | 2 | 2 | 2 | 3 |
  A | 0 | 1 | 2 | 2 | 3 | 3 |
  B | 0 | 1 | 2 | 2 | 3 | 4 |

左方格和上方格中较大的值填充。

        (2)虚拟DOM比较算法(vue,react等使用)

                1.react使用顺序比较算法,它通过递归地比较新旧元素树的结构和属性,尽量减少实际DOM操作的次数,vue对比节点。当节点元素相同,但是classname不同,认为是不同类型的元素,删除重建,而react认为是同类型节点,只是修改节点属性。

        react-diff: 双端对比(列表顺序变化会损失性能)

                2.vue使用的双指针算法,Vue 会找出两棵树的差异,并且尽可能地以最小的代价更新到真实 DOM。Vue 会尽量复用已存在的 DOM 元素,而不是直接替换整个元素。vue的列表对比,采用的是两端到中间比对的方式,而react采用的是从左到右依次对比的方式。当一个集合只是把最后一个节点移到了第一个,react会把前面的节点依次移动,而vue只会把最后一个节点移到第一个

        vue-diff: 双指针方式对比(潜逃过深的节点结果会导致算法性能下降)

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值