学点React:2. Fiber架构是什么?

42 阅读2分钟

1. fiber架构要解决的问题是什么?

在fiber架构之前 React是基于【堆栈的递归调和算法】(dom diff)

所谓基于堆栈,就是说正常的函数调用,直到函数逐个调用完成,中间没有停顿,一气呵成

原始版本的伪代码是怎么样的, updateDomTree 函数递归地遍历了整个组件树,直到所有的子组件都完成调和。由于 JavaScript 是单线程的,这意味着在调和过程中,其他任务(如动画、用户交互等)将被阻塞。

function updateDomTree(parent, children) {
  // 遍历子组件
  for (let i = 0; i < children.length; i++) {
    const child = children[i];
    // 创建或更新 DOM 节点
    updateDOMNode(parent, child);
    // 递归调和子组件的子组件
    if (child.children && child.children.length > 0) {
      updateDomTree(child, child.children);
    }
  }
}

// 更新整个组件树updateDomTree(root, root.children);

这种算法在进行虚拟DOM比较时可能会阻塞主线程,导致页面渲染卡顿,用户体验不佳。

为了解决这个问题,于是有了Fiber架构。

2. fiber架构解决问题的思路?

浏览器做的事情是很多的,但是这里存在一个问题,问题就是为了实现流畅的用户体验,浏览器需要在每秒约 60 帧的速率下完成这些任务。这意味着每一帧只有大约 16.7 毫秒的时间来执行所有操作,所以当我们一个函数调用栈持续时间过长的时候,会给用户卡顿的感觉。

那么既然浏览器会做很多事情,那就有轻重缓急,什么是着急的事情呢?就是那些不处理就会降低用户体验的事情,比如我点击一个按钮没有反应,动画卡顿等等这些都是难以接受的。

要想利用浏览器的空余时间来工作,有一个前提要求,那就是任务是一个个独立的任务。而我们引入Fiber架构的原因,就是为了将我们原本一气呵成的堆栈调用进行拆分,拆分成一个个可以独立运行的任务,充分利用浏览器的工作机制,提升性能。

3.fiber架构的定义

Fiber架构是React为了解决性能问题和提升调度能力而引入的一种新的内部实现机制.它主要通过重新组织渲染过程,使React可以更有效地执行渲染任务。