Skip to Content
内部原理子树替换

子树替换

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”更值。

下一步

继续阅读:

  1. 连续性契约
  2. 局部重排与 damage model
  3. Runtime 循环
Last updated on