事件循环与调度模型
1. 官方模型:向 Web Event Loop 对齐
核心文档:
ReactCommon/react/renderer/runtimescheduler/__docs__/README.md- RFC0744
RN 定义的循环步骤:
- 选择 task
- 执行 task
- 清空 microtasks
- 更新渲染
2. 关键语义:同一 tick 内 UI 更新原子化
文档明确强调:
- 一个 task 及其 microtasks 引发的 UI 更改会一起 flush
- 这避免了多阶段渲染时用户看到“中间态”
useLayoutEffect、微任务、渲染更新之间语义更接近 Web
这是性能与正确性同时受益的设计:既减少闪烁,也降低“时序 bug”。
3. RuntimeScheduler 的地位
官方文档写明实现中心在 RuntimeScheduler(新架构使用 modern 实现)。
它既承担:
- 任务优先级调度
- 事件循环语义落地
可说:RN 的“调度器”不是单一 JS scheduler,而是 JS runtime + renderer 同步协议的一部分。
4. 为什么这件事很重要
旧模型常见问题(RFC0744 背景):
- layout effect 时拿不到稳定布局
- effect 与渲染并行导致跨平台行为差异
- 微任务语义不完整时,Web API 对齐难
新模型收益:
- 与 React/DOM 编程心智更一致
- 更容易引入
MutationObserver/PerformanceObserver等 Web 风格 API - 为同步事件和后续优化提供统一“原子工作单元”
5. 口头表述模板
“RN 在新架构下把 RuntimeScheduler 提升为事件循环中心,保证 task+microtask 形成原子渲染边界。这样既修复了 layout/effect 时序问题,也让它可以逐步对齐 Web API 语义,这个是 New Architecture 的底层稳定器之一。”