子树替换
Ansiq 当前的更新模型不是完整 keyed virtual DOM reconciliation。
它选择的是一条更务实的路线:
- 找到 dirty component scopes
- 只 rerender 对应子树
- 用新子树替换旧子树
- 再做 partial relayout 和 redraw
为什么这样选
因为 Ansiq 最初面对的是 terminal UI,而不是浏览器 DOM。
终端 UI 的重点更多在于:
- 降低整树更新成本
- 保持交互态连续
- 精确控制 redraw 和 patch emission
在这个背景下,先做 subtree replacement 比先做完整 reconciliation 更合理。
这条路线的代价
代价也很明确:
- 你必须解决 continuity state
- 你必须明确 subtree replacement 的边界
- 你必须收紧 relayout 和 damage model
否则 subtree replacement 很容易沦为“比整树重建稍微小一点,但边界更乱”的中间态。
为什么 continuity contract 会变得重要
因为一旦你直接替换子树,就必须回答:
- 焦点还在不在
- input cursor 怎么保
- list/table/tabs 的选中态怎么保
- scroll position 怎么保
Ansiq 现在已经把这些交互态逐步收进 continuity contract,而不是继续在 runtime 里写散乱特判。
未来是否还会走向更完整的 reconciliation
可能,但前提是:
- 当前 runtime 主链路足够稳定
- continuity contract 足够清楚
- keyed identity 的语义足够明确
在这之前,继续把 subtree replacement 做成熟,比过早追求“看起来更先进的 reconciliation”更值。
下一步
继续阅读:
Last updated on