介绍 Diff 算法的概念|学习笔记

简介: 快速学习介绍 Diff 算法的概念

开发者学堂课程【React 入门与实战介绍 Diff 算法的概念】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/585/detail/8076


介绍 Diff 算法的概念


目录:

一、Diff 算法 tree diff

二、Diff 算法 component diff

三、Diff 算法 element diff


diff 算法就是进行虚拟节点对比,并返回一个 patch 对象,用来存储两个节点不同的地方,最后用 patch 记录的消息去局部更新 Dom

目的:寻找差异

特点:

比较只会在同层级进行, 不会跨层级比较

diff 比较的过程中,循环从两边向中间比较。

image.png


一、tree diff

treediff :新旧两棵 DOM 树,逐层对比的过程,就是 Tree Diff ;当整颗 DOM 逐层对比完毕,则所有需要被按需更新的元素,必然能够找到

 

二、Component diff

component diff :在进行 TreeDiff 的时候,每一层中,组件级别的对比叫做 Component Dif f;

如果对比前后,组件的类型相同,则暂时认为此组件不需要被更新;

如果对比前后,组件类 型不同,则需要移除旧组件,创建新组件,并追加到页面上

React 是基于组件构建应用的,对于组件间的比较所采取的策略也是非常简洁、高效的。

如果是同一类型的组件,按照原策略继续比较 Virtual DOM 树即可如果不是,则将该组件判断为 dirty component,从而替换整个组件下的所有子节点

对于同一类型下的组件,有可能其 Virtual DOM 没有任何变化,如果能确切知道这一点,那么就可以节省大量的diff 算法时间。因此, React 允许用户通过shouldComponentUpdate()来判断该组件是否需要大量 diff 算法分析。

 

三、Element diff

element diff :在进行组件对比的时候,如果两个组件类型相同,则需要进行元素级别的对比,这叫做 Element Diff

当节点处于同一层级时,diff提供三种节点操作:

INSERT_MARKUP(插入):如果新的组件类型不在旧集合里,即全新的节点,需要对新节点执行插入操作。

MOVE_EXISTING(移动):旧集合中有新组件类型,且 element 是可更新的类型,generatorComponentChildren 已调用 receiveComponent,这种情况下 prevChild=nextChild,就需要做移动操作,可以复用以前的 DOM 节点。

REMOVE_NODE (删除):旧组件类型,在新集合里也有,但对应的 elememt 不同则不能直接复用和更新,需要执行删除操作,或者旧组件不在新集合里的,也需要执行删除操作。

相关文章
|
1月前
|
存储 算法
数据结构与算法学习二二:图的学习、图的概念、图的深度和广度优先遍历
这篇文章详细介绍了图的概念、表示方式以及深度优先遍历和广度优先遍历的算法实现。
52 1
数据结构与算法学习二二:图的学习、图的概念、图的深度和广度优先遍历
|
2月前
|
JavaScript 前端开发 算法
React技术栈-虚拟DOM和DOM diff算法
这篇文章介绍了React技术栈中的虚拟DOM和DOM diff算法,并通过一个实际案例展示了如何使用React组件和状态管理来实现动态更新UI。
41 2
|
3月前
|
JavaScript 前端开发 算法
react中虚拟dom和diff算法
在React中,虚拟DOM(Virtual DOM)和Diff算法是两个核心概念,它们共同工作以提高应用的性能和效率。
41 4
|
25天前
|
算法 JavaScript UED
Diff 算法的实现原理
【10月更文挑战第18天】Diff 算法是 Vue.js 中实现高效 DOM 更新的核心机制,通过合理的比较和优化策略,能够在保证界面正确性的同时,最大程度地减少 DOM 操作,提高应用的性能和用户体验。
26 2
|
25天前
|
算法 JavaScript
Vue 中的 Diff 算法
【10月更文挑战第18天】需要注意的是,Diff 算法虽然能够提高性能,但在某些复杂的场景下,可能仍然会存在一些性能瓶颈。因此,在实际开发中,我们需要根据具体情况合理地使用 Diff 算法,并结合其他优化手段来提高应用的性能。
12 1
|
1月前
|
JavaScript 算法 前端开发
vue 中diff算法
【10月更文挑战第10天】
28 1
|
1月前
|
JavaScript 算法 前端开发
【VUE】Vue的diff算法和React的diff算法
【VUE】Vue的diff算法和React的diff算法
|
2月前
|
XML JavaScript 前端开发
学习react基础(1)_虚拟dom、diff算法、函数和class创建组件
本文介绍了React的核心概念,包括虚拟DOM、Diff算法以及如何通过函数和类创建React组件。
28 2
|
3月前
|
前端开发 算法 JavaScript
React原理之Diff算法
【8月更文挑战第24天】
|
2月前
|
机器学习/深度学习 JavaScript 算法
面试中的网红虚拟DOM,你知多少呢?深入解读diff算法
该文章深入探讨了虚拟DOM的概念及其diff算法,解释了虚拟DOM如何最小化实际DOM的更新,以此提升web应用的性能,并详细分析了diff算法的实现机制。