fiber 架构的本质

直白的描述,啥是 fiber

唔,大家好久不贱……最近在研究 fiber,然后终于研究的差不多啦,就发篇文章

在文章开始之前,需要了解两个前置知识:

  1. 链表

什么是链表,和传统的树有啥不同 其实最大的不同在于,就是链表上的没一个节点,都能知道自己的父节点,兄弟节点,子节点,这点在传统的树的递归中是没办法知道的

  1. requestIdeCallback

这个 API 也是关键,简单说就是它接收的回调,会在每一帧的空闲时间执行

通俗讲,就是假如这里的一帧是十秒钟(假如),执行一个回调需要一秒钟,那么还剩九秒钟,再执行一次,直到执行十次,空闲时间塞满了

也就是说,这个 while 循环,是空闲时间的不断递减

以上,fiber 的执行过程就很明了了,这就是 fiber 的最关键

流程

不上代码,直白的描述整个流程

我们的 react 都是从 render 函数开始的,传统的 diff patch 的方法,会 render 的时候进行首次递归,这个过程会进行 diff 和 path,然后第二次之后的递归,是递归父组件,进行局部的 diff patch

fiber 不是这样

fiber 首次 render 的时候,就会调用一次 requestIdeCallback,之前说了,这个 api 会进行循环

这个循环,它负责变更 current fiber(当前的 fiber 节点) 前面提到,链表天生可以拿到 节点本身,还能拿到父节点,兄弟节点,子节点

而 fiber 节点,其实就是比 vnode 多了这些,

所以这个循环,变更 fiber 很简单,就是不断地将当前的 fiber ,变成 fiber.child,当没有 child 了,就向上找 slibing,兄弟再找不到了,就找父亲,全找完,完工

也就是说,这里有个全局的 current fiber 不断的变更

它会找孩子找兄弟找父亲,直到找完

与此同时,会进行组件更新,也就是原始 vnode 的更新,主要是更新 state,props,render() 出新的 vnode

其实到这里,fiber 就结束了

本质上就是不断地变更当前的 fiber ,顺便变更 state 和 props

还有一步就是 commit,相当于以前的 patch 操作

我们已经得知,current fiber 会被不断地更替,携带的 props 和 state 也会被不断更替,那很简单,commit 的参数就可以是 current fiber,进行 dom 操作

以上,是 fiber 的整个流程,其实比递归更加容易理解,整个设计也更加精彩,不能理解主要是因为文章太鸡肋,加上 react 的实现真的很难读懂

总结

fiber 架构的本质:

  • 循环条件:利用 requestIdeCallback 空闲时间递减
  • 遍历过程:利用链表,找孩子找兄弟找父亲
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值