Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

React Fiber 的执行流程 #56

Open
nmsn opened this issue May 17, 2023 · 1 comment
Open

React Fiber 的执行流程 #56

nmsn opened this issue May 17, 2023 · 1 comment
Labels

Comments

@nmsn
Copy link
Contributor

nmsn commented May 17, 2023

如题

@nmsn nmsn added the React label May 17, 2023
@nmsn
Copy link
Contributor Author

nmsn commented May 17, 2023

总结

React Fiber 的执行流程包括初始化阶段、任务调度阶段、协调阶段(Reconciliation 和 Commit)、完成阶段等,通过优先级调度器、协调算法、diff 算法等来提高 React 应用的性能和响应速度。

详细步骤

React Fiber 是 React 的一种新的协调引擎,其执行流程如下:

初始化阶段:React Fiber 通过调用 render() 方法来生成虚拟 DOM 树,并将其存储在 Fiber 节点中。在这个阶段,React Fiber 还会创建一些全局变量,如 workInProgressRoot、nextUnitOfWork 等,用于记录当前的工作进度和任务单元。

任务调度阶段:React Fiber 通过优先级调度器(Priority Scheduler)来决定当前要执行的任务单元。每个任务单元都是一个 Fiber 节点,记录了该任务的类型、状态、子节点等信息。React Fiber 将任务单元按照优先级分为多个批次(Batch),每个批次包含一组任务单元。React Fiber 首先会执行高优先级的批次,然后执行低优先级的批次。

协调阶段:在每个任务单元执行前,React Fiber 会检查该任务单元是否需要更新。如果需要更新,则会进入协调阶段,根据当前节点和子节点的状态来决定该任务单元的执行方式。协调阶段分为两个步骤:Reconciliation 和 Commit。

Reconciliation 阶段:React Fiber 通过遍历 Fiber 树来比较新旧虚拟 DOM 的差异,找出需要更新的节点,并标记这些节点为“脏节点”。React Fiber 通过 diff 算法来比较新旧虚拟 DOM 的差异,尽可能地重用已有的节点,从而减少 DOM 操作的次数。

Commit 阶段:在 Reconciliation 阶段完成后,React Fiber 会进入 Commit 阶段,将所有“脏节点”更新到真实的 DOM 上。在 Commit 阶段,React Fiber 会调用各个生命周期方法,如 componentDidMount、componentDidUpdate 等,以完成组件的更新和挂载。

完成阶段:在 Commit 阶段完成后,React Fiber 将当前的工作进度标记为完成,并将结果返回给调用者。如果还有未完成的任务单元,React Fiber 会继续执行任务调度和协调阶段,直到所有任务都完成。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant