react--虚拟dom与diff算法

原理: React会先将你的代码转换成一个javascript对象,然后再把这个javascript对象转换成真实的DOM。而这个javascript对象就是所谓的虚拟DOM。

为什么要用虚拟dom,虚拟DOM为什么能提高性能:

react虚拟DOM 减少对真实DOM 的创建以及真实DOM 的对比 ,创建的都是js 对象, 对比的也是js 对象 ,因此react 底层实现极大的性能飞跃
DOM 实现(数据更新页面更新):

1、state 数据

2、jsx 模板

3、数据+模板结合,生成真实DOM来显示

4、state 发生变化

5、数据+模板 结合,生成真实的DOM,替换原始的DOM

缺陷:

第一次生成了一个完整的DOM片段

第二次生成了一个完整的DOM片段,第二次的DOM替换第一次的DOM,非常耗性能

优化:

1、state 数据

2、jsx 模板

3、数据+模板结合,生成真实DOM来显示

4、state 发生变化

5、数据+模板 结合,生成真实的DOM,并不直接替换原始的DOM

6、新的DOM(doucmentFragment)和原始的DOM做对比,找差异

缺陷:

性能提升的并不明显

虚拟DOM方案:

1、state 数据

2、jsx 模板 :

jsx-> createElement -> 虚拟DOM(JS对象) -> 真实的DOM
在这里插入图片描述

3、数据+模板结合,生成真实DOM来显示

在这里插入图片描述

4、生成虚拟DOM (虚拟DOM就是一个JS对象,用它来描述真实的DOM)(损耗性能)

在这里插入图片描述

5、state 发生变化

6、数据+模板生成新的虚拟DOM ( 极大的提升了性能)

在这里插入图片描述

7、比较原始虚拟DOM和新的虚拟DOM的区别,找到区别是span中的内容
Diff(diffrence)— 同级比较

在这里插入图片描述

react 虚拟dom 是同层比对 逐层比对(index 作为key 是不稳定的)

8、直接操作DOM,改变span中的内容

优点:

1、性能提升了

2、它使得跨端应用得以实现–react native

小结

React 通过大胆的假设,制定对应的 diff 策略,将 O(n3) 复杂度的问题转换成 O(n) 复杂度的问题

通过分层对比策略,对 tree diff 进行算法优化
通过相同类生成相似树形结构,不同类生成不同树形结构以及shouldComponentUpdate策略,对 component diff 进行算法优化
通过设置唯一 key 策略,对 element diff 进行算法优化
tree diff 和 component diff 是从顶层设计上降低了算法复杂度,而 element diff 则在在更加细节上做了进一步优化。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值