react 之 Fiber

起源

Fiber架构 诞生在react16, 为了解决react15及以前版本更新不可中断的问题。

堆栈协调Stack Reconciler

react在工作中有一个协调阶段Reconciler,在react15使用stack reconciler,因为react是使用递归来生成虚拟DOM树(react15的叫法)。构建过程中,数据保存在堆栈,由于递归是同步执行,当需要协同节点元素过多,会导致浏览器卡顿。

Fiber 架构

react16推出了Fiber架构,解决了协调阶段递归调用无法中断的问题。

react团队提出Concurrent Mode(并发模式),通过将大的同步任务拆分成一个个的小的同步任务,在浏览器运作的时候,平均的把这些小的同步任务塞到每一帧的一小块时间里执行,这种做法我们称为可中断的异步更新

由于堆栈协调无法拆分任务,而Fiber可以保存更新运行的状态,以便下次调用可以继续上次的更新,所以说Fiber为Concurrent Mode 模式打下了基础,并解决了卡顿掉帧问题。

Fiber 工作流程

react15用虚拟DOM树,用来建立和真实DOM的映射关系。在Fiber中这种映射关系替换成了Fiber树。由当前应用根节点FiberRootNode和当前组件根节点rootFiber构成,rootFiber实际上是一个FiberNode,它又连接了由其他FiberNode组成的子树。FiberRootNode通过current指针连接当前组件树rootFiber。这里我们用了当前组件树这个词,其实是为了引出Fiber架构下的双缓存机制。

双缓存机制

在React中,我们使用了双缓存机制,即系统中始终存在着两棵Fiber树,一棵对应的是当前DOM在屏幕上显示的画面,被称作current,此时我们称其为当前组件树,一棵是在内存中进行构建的新的Fiber树,被称作workInProgress,此时我们称其为正在构建中的组件树。

Fiber树示例

function App() {
  return (
    <div className="App">
      <header>
        <div>
            Hello React
        </div>
        <section>
          Happy Hacking
        </section>
      </header>
    </div>
  );
}

一棵完整的Fiber树示例如图所示:
根节点FiberRootNode会使用current指向当前组件树,当前组件树的根节点rootFIber会使用child指向子节点,如果存在多个子节点,那么子节点与子节点之间又会使用sibling指针连接。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值