React Fiber 是什么?
React 15 以及之前的版本有一个主要的问题 —— 虚拟 dom 的 diff 操作是同步完成的。
这就意味着当页面上有大量 DOM 节点时,diff 的时间可能过长,从而导致交互卡顿,或者直接没有反馈。
这就引出了 React Fiber 来处理这样的问题。
为了保证阅读效果,建议读者边阅读边动手实操,点击这里可以下载源码。
这篇文章是什么?不是什么? 这篇文章将从一个简单的例子入手,主要聚焦于解释 React Fiber 是怎么做到异步可中断更新的。
这篇文章并不会深究 Fiber 中其他有趣的事情,例如 workInProgress、Effects list、updateQueue、performUnitOfWork、render phase & commit phase,这方面已经有足够优秀的文章帮我们弄清楚这些事情,感兴趣的同学可以阅读下面的文章列表:
Inside Fiber: in-depth overview of the new reconciliation algorithm in React React Fiber 源码解析 React issue 13186 这可能是最通俗的 React Fiber 打开方式 从一个问题开始 在讲 React Fiber 之前,我们先来看一个简单的例子:
现在有 10000 个节点,每个节点计算耗时 1ms,如何保证 10000 个节点顺利执行完成,又能让用户感知不到卡顿?
为了方便测试,我们用计算斐波那契数列来模拟节点耗时:
1 2 3 4 5 6 7 8 9 10 11 12 export function fibonacci(n) { if (n === 0) return 0; else if (n === 1) return 1; return fibonacci(n - 1) + fibonacci(n - 2); } export const fibonacciWithTime = (n) => { console.