react学习笔记1(diff算法和Component相关)

本文探讨了React的diff算法及其在提升Web应用性能中的作用,详细阐述了调和过程、优化策略,包括tree diff、component diff和element diff。此外,还介绍了Component、PureComponent和Immutable在优化中的应用,特别是shouldComponentUpdate、PureComponent的浅对比以及Immutable数据的高效处理。
摘要由CSDN通过智能技术生成

1. diff算法

1.1 diff 算法的作用

去掉多余的 DOM 操作,提升web app性能

1.2 reconcilition(调和)
  • 定义:将Virtual DOM树转换成actual DOM树的最少操作的过程。diff 算法是调和的具体实现
  • 过程: 渲染时调用 render 方法(返回 Virtual Dom 树),比较渲染前后 虚拟dom(Virtual Dom) 的差别,Rendering 时,只更新差别部分(精准update),以减少多余 Dom 操作
1.3 diff算法优化
  • 传统 diff 算法 问题: 计算耗时,时间复杂度:O(n^3)
  • react diff :时间复杂度 O(n)
  • react diff 的三大策略
    • 进行同层比较(tree diff)
    • 不同类的 React 组件,被当做不同的 Dom 结构而替换(component diff)
    • key prop:组件 身份标识,判断是否是同一组件 (element diff)
1.4 tree diff
  • 跨层级Dom操作:创建节点,删除节点
  • 官方建议:不要进行跨层级操作(使用显示/隐藏,代替删除/新增操作)
1.5 component diff
  • 组件变化时,如果 virtual dom 没变,可通过 shouldComponentUpdate 方法控制是否需要 diff 运算
  • 组件类不同(结构相似),则判断为 dirty component(脏组件),整个替换
1.6 element diff
  • 同层节点 diff 操作:删除、插入、移动
  • 移动:尽量减少将类似最后一个元素移动到列表首部的操作(时间复杂度:O(n))
  • 图:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值