React Fiber架构的核心在于赋予程序控制权在开发者、框架与浏览器间合理切换,如在渲染过程中暂停,直至获取数据后恢复。这一能力使React能够从JS引擎手中夺回调度权,从而轻松实现异步编程,并支持诸如时间片切分(Time slicing)和错误边界(Suspense)等功能。Redux-saga通过迫使用户使用生成器函数来掌控调度权,简化异步逻辑编写。当用户yield值时,执行权转移给生成器执行器,使得异步代码编写如同同步代码般简洁明了。Crank框架同样借助生成器实现异步编程,但React通过同步纯函数和memo机制,不仅提供了更为直接的异步原语,还避免了性能损耗,同时提供更灵活的恢复机制。React掌控调度权的方式采用链表遍历组件树,避免使用原生调用栈,并允许组件通过抛出Promise将控制权交还调度器。一旦掌控调度权,React设计了异步原语,使开发者能用同步方式编写异步代码,无需依赖生成器机制。一个例子是React.lazy,允许定义异步数据像同步数据一样被消费。虽然生成器作为JS原生的协程模型,支持控制权的交出与恢复,理论上可用于实现React Fiber架构。但React团队最终选择同步纯函数+memo方案,原因在于此方法能避免不必要的计算浪费,通过抛出信号退出,下次重新执行时自动计算。生成器的状态管理需要执行引擎参与,而memoization则完全由React控制,这使得React能更高效地管理资源。尽管生成器版本也可使用memoization,但若需要从头开始计算,生成器的优势在于原地恢复。React的方案则提供了更高效和灵活的计算控制与资源管理,确保性能优化的同时简化了异步逻辑的编写。