批量导入
性能差异及原因
当需要向文档导入多份更新时,调用 doc.importBatch(updates) 比逐条导入快得多。这种性能差异来自两种方式在合并数据时的开销差异。
const = new ();
.("text").("Hello");
const = .({ : "update" });
const = .();
.("text").("Hello World");
const = .({ : "update", : });
const = new ();
.([, ]); // 更快
const = new ();
for (const of [, ]) { // 更慢
.();
}批量导入的核心优势
1. 只需一次 diff 计算
最大的优势是批量导入只计算一次 diff。单次导入则需要依次执行:
- 将远端更新合并进本地历史;
- 计算当前版本到合并后版本之间的状态变更;
- 将 diff 应用到当前文档状态。
diff 计算有固定开销,逐条导入会重复支付。而 doc.importBatch(...) 只做一次 diff,自然更快。
2. 降低事件沟通成本
批量导入还会生成更精简的事件。逐条导入每次都会产生一个新事件,而 doc.importBatch(...) 只创建一个包含所有变更的事件。