跳到主要内容

computeMinimalDocumentChange()

function computeMinimalDocumentChange(current, next): DocumentChangeSpec | null;

Defined in: document-sync.ts:54

计算把 current 变成 next 所需的最小替换区间。

跳过公共前缀与公共后缀,只替换真正变化的那一段;两者相同时返回 null, 调用方据此完全跳过事务。

Parameters​

ParameterTypeDescription
currentstring编辑器当前文档内容
nextstring宿主希望写入的新内容

Returns​

DocumentChangeSpec | null

最小替换区间;无变化时为 null

Remarks​

只做前后缀比对,不做逐行 diff:宿主回写的典型形态是「追加一段」「改中间一小块」 「整体格式化」,前后缀已经能把前两种收敛到极小区间;而整体格式化本就没有可保留的区间。 复杂 diff 会带来更大的实现与性能风险,收益却只在极少数场景。

调用方还须给事务加上 Transaction.addToHistory.of(false) —— 最小差量只解决光标问题,不会阻止程序写入进入 undo 栈。

Example​

computeMinimalDocumentChange('hello world', 'hello brave world');
// `{ from: 6, to: 6, insert: 'brave ' }`
computeMinimalDocumentChange('same', 'same'); // null