react的diff算法有什么用?原理是什么?

作用:在DOM需要更新的时候,通过diff算法可以 计算出 虚拟DOM 中真正变化的部分,只针对变化的部分进行更新渲染,而不是重新渲染整个页面,造成不必要的性能浪费

原理:react中的diff原理其实是对传统diff的优化,传统的diff算法,需要遍历整棵树的节点然后进行比较,是一个深度递归的过程,性能很差

          优化后的diif原理提出了三大策略:
	1、tree diff —— 层级对比:只对相同层级的DOM节点进行比较,发现节点不存在就会直接删除这个节点和他下面的所有子节点,这样有序的对Dom树进行遍历,就能完成整个树的对比

	2、component diff —— 组件对比
		1)同类型组件对比遵循tree diff的规范
		2)不同类型的组件对比,把不同的组件判断为不干净的组件(脏组件),然后替换这个组件和他下面的所有子节点
		3)如果是同一类型的两个组件中,如果我们使开发人员而且知道Dom树没有发生任何变化,可以使用shouldComponentUpdate这个生命周期来判断组件是否需要进行diff

	3、element diff —— 节点对比
		面对全新节点时,执行插入的操作(字面意思,不用想的太复杂)

		面对多余节点时,执行删除操作(有以下两种情况)
			1)组件新集合中有组件旧集合中的类型,但对应的element不可更新,只能执行删除
			2)旧组件不在新集合里面,执行删除

		面对换位节点时,执行移动操作
			eg:旧组件:[ A,B,C,D ]     新组件:[A,D,B,C]
			以往在旧的diff算法中,只要面对不同的B/D就执行删除,再从新插入,这样浪费了很多复用的节点
			在element diff算法中,对于新旧的层级都添加了唯一的 key 值进行区分,只要对应的key值和对应的元素没有改变,只需要移动就可以了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值