为什么 React 16 版本中 render 阶段放弃了使用递归

为什么 React 16 版本中 render 阶段放弃了使用递归

旧版 Stack算法的问题:
stack算法是循环加递归的方式,这种对比方式有一个问题,
就是一旦任务开始无法中断,因为递归需要一层层进入,一层层递归。
如果组件特别多,主线程就会长期调用,只有完成更新才能释放,页面卡顿问题,形象体验

Fiber算法

利用浏览器的空闲时间,拒绝长期占用主线程
放弃递归只采用循环,循环可以中断
将任务才分,成为一个个小任务

实现思路
拆分成两部分

  1. 构建Fiber 可以中断
  2. 提交Commit 不可中断

DOM第一次渲染: jsx语法 > babel转换成createElement方法 > 返回Virtual DOM > 构建Fiber对象 > 找到每一个Virtual对象,为每一个virtual构建Fiber > 构建Fiber对象存到数组中 > 循环Fiber数组,将Fiber对象存储当前的节点类型应用到真实dom中

更新操作渲染: 对比newFiber 与 oldFiber > 对virtual节点构建Fiber对象 > 循环Fiber数组,找到对应的Fiber类型应用到节点上 > 页面更新

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值