跳转到内容

架构概览

本页从“状态如何读、如何写、如何扩展”三个问题出发,帮助你快速建立 IO 运行时心智模型。

IO 的运行时由四个核心层组成:

  • 状态层Unit(叶子值)与 Tree(Scope/Array)构成可读写的状态网格。
  • 派生层derived() 用信号系统追踪读取,提供只读计算值。
  • 日志层:每次写入生成 patch,聚合成 update,支持回放与撤销。
  • 扩展层withBehaviors() 将持久化、调度、DevTools 等能力注入视图。
flowchart TD
  A[Write: set/commit] --> B[Create patches]
  B --> C[Mark dirty & bump revision]
  C --> D[Emit update]
  D --> E[Emit value]
  E --> F[Subscribers render]
  G[Read: get/snapshot] --> H[Snapshot cache]
  • core/io()ioTree()derived() 入口。负责把 plain object/array 转成树结构。
  • units/Unit 的实现,维护 revision、值缓存与订阅。
  • extensions/:行为扩展与 IoView 适配(persist/schedule/devtools)。
  • utils/:批处理、更新日志、快照冻结、调度与类型定义。
  • container/:树节点缓存与 path 索引工具。

代码位置:packages/io/src/lib/

  • get() 会记录依赖(用于 derived 的依赖追踪)。
  • snapshot() 返回冻结快照,适合序列化、日志与跨层传递。
  • 树节点会做快照缓存,只在相关路径脏时重建局部快照。
  • set/commit 会生成 patch,递增 revision。
  • 写入过程会标记脏节点,并触发 subscribeUpdatesubscribe
  • 批处理 batch() 会合并多次更新,减少重复通知。
  • subscribe(fn) 关注“新值”(常用于 UI)。
  • subscribeUpdate(fn) 关注“发生了什么变化”(patch/revision)。
  • 在树根订阅 subscribeUpdate 可捕获整个 store 的变更流。
  • withBehaviors(view, [persist(), schedule(), devtools()]) 返回增强视图。
  • 行为通过 IoView 统一接口扩展 get/set/subscribe
  • extensions 挂载扩展实例,destroy() 统一清理资源。
  • React/Vue/Svelte 适配统一依赖 snapshot() + subscribe()
  • 适配器通过调度策略合并通知,降低重渲染抖动。
  • 业务读操作优先 snapshot(),计算依赖用 get()
  • 多字段联动更新优先 commit(),避免碎片通知。
  • 需要追踪变更时,在根上订阅 subscribeUpdate() 并落日志。