Skip to content

增量更新 ​

createPipeline 负责组合与缓存,createDrawHandle 再为 Pipeline 接上宿主并记住上一帧。

正在渲染图表…

首帧调用 mount,之后只把 patch 交给宿主。调用方仍然负责把未知 JSON 解析成可信的 DrawDocument;handle 不会替你做边界校验。

失败时保留上一帧 ​

如果 bind、布局或场景构建失败,handle 不会把半成品推到宿主。DOM host 的 apply 也会先完整 校验再提交;失败抛 HostError,handle 转成 HOST_FAILED,屏幕上仍然是上一帧。 这对交互式编辑很重要:改坏一个字段不应该让整张图消失。

Pipeline 缓存 ​

createPipeline 按阶段复用结果:

  • 只换 tokens / overlay:复用 bind 与 layout,只重跑 build;
  • 只换 router:复用 bind、measure、place 与 attach,只重跑 route;
  • 同文档同主题同覆盖:整帧命中缓存。

frame() 返回 bound、theme、layout、scene、diagnostics 和每一段的缓存状态。

主题与状态 ​

setTheme() 切换调色板与 typeStyles,不修改文档。setOverlay() 承载 selected / hover / muted 等运行时样式;两者都通过正常 diff 落到宿主。

注册表版本 ​

注册表不可变。创建 pipeline 或 handle 后,再用 registry.with(...) 得到的是新实例, 不会改变已经创建的组合根。

诊断是累积的 ​

update() 返回本次运行的诊断;diagnostics() 返回从创建以来的全部诊断。 不要把“没有抛异常”当成“没有任何问题”。

常见误解 ​

  • handle 接收的是已解析文档,不是任意 JSON。
  • 失败不会自动回滚输入,只会保留上一帧场景。
  • 更新是显式动作;修改原对象后不调用 update(),画面不会变化。
  • handle 持有一份注册表快照;要换形状定义,重新创建 pipeline / handle。

MIT License