主题
增量更新
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。