Loro-CRDT 1.5.0版本发布:增强实时协作能力的创新特性
Loro是一个基于CRDT(Conflict-Free Replicated Data Type)技术的分布式协作框架,它通过创新的数据结构设计解决了分布式系统中数据一致性的难题。在1.5.0版本中,Loro引入了两个重要的新特性:pre-commit和first-commit-from-peer钩子机制,以及全新的EphemeralStore临时状态管理方案,进一步提升了实时协作场景下的开发体验和性能表现。
强大的提交钩子机制
在分布式协作系统中,操作的提交和同步是核心流程。Loro 1.5.0版本引入了两个关键的钩子机制,为开发者提供了更精细的控制能力。
pre-commit钩子:提交前的最后干预点
pre-commit钩子允许开发者在每次提交操作执行前修改提交参数。这个特性特别有价值,因为在Loro中,commit()方法经常被隐式调用,比如在doc.import、doc.export、doc.checkout等方法中都会触发自动提交。如果没有这个钩子,开发者想要为每个提交添加自定义信息时,可能会遗漏这些隐式提交场景。
const doc = new LoroDoc();
doc.setPeerId(0);
doc.subscribePreCommit((e) => {
e.modifier.setMessage("test").setTimestamp(Date.now());
});
这个钩子的一个高级应用场景是构建Merkle DAG(有向无环图)来表示编辑历史。通过结合exportJsonInIdSpan方法,开发者可以为每个变更计算哈希值,形成完整的变更链:
doc.subscribePreCommit((e) => {
const changes = doc.exportJsonInIdSpan(e.changeMeta);
const hash = crypto.createHash("sha256");
// 计算变更内容的哈希
const sha256Hash = hash.digest("hex");
e.modifier.setMessage(sha256Hash);
});
这种机制不仅能够确保变更历史的完整性验证,还能为分布式系统提供更强大的审计能力。
first-commit-from-peer钩子:新参与者的欢迎仪式
first-commit-from-peer钩子在某个peer首次向文档提交操作时触发。这个特性非常适合用来初始化peer相关的元数据,比如用户标识信息:
doc.subscribeFirstCommitFromPeer((e) => {
doc.getMap("users").set(e.peer, "user-" + e.peer);
});
这种设计模式使得用户管理系统可以自然地融入文档协作流程,而不需要额外的同步机制。
EphemeralStore:轻量级临时状态管理
在实时协作应用中,除了持久化的文档内容外,还需要处理各种临时状态,如光标位置、选中区域等。传统解决方案通常使用Awareness机制,但随着应用复杂度增加,Awareness的全量同步模式会带来性能问题。
Loro 1.5.0引入了EphemeralStore作为Awareness的替代方案,它基于时间戳的最后写入胜出(LWW)策略,提供了更灵活的键值存储能力:
const store = new EphemeralStore();
store.set("cursor-position", {x: 100, y: 200});
store.set("online-users", ["UserA", "UserB"]);
与Awareness相比,EphemeralStore具有以下优势:
- 支持细粒度的键值更新,只有变更的部分会被同步
- 可以按需编码特定键的数据,减少网络传输量
- 提供统一的事件监听机制,简化状态管理
其他改进
1.5.0版本还包含了一些重要的修复和增强:
- 修复了在文本末尾换行符处应用多个样式的问题
- 新增了将当前事务中的操作以JSON格式导出的能力
这些改进使得Loro在处理富文本内容时更加可靠,同时也为开发者提供了更强大的调试和分析工具。
总结
Loro 1.5.0通过引入创新的钩子机制和临时状态管理方案,为构建复杂的实时协作应用提供了更强大的工具集。pre-commit和first-commit-from-peer钩子使得开发者能够更精细地控制协作流程,而EphemeralStore则为临时状态管理提供了更高效的解决方案。这些特性共同推动了CRDT技术在实时协作领域的应用边界,使得开发高性能、可靠的协作应用变得更加简单。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0449
源启盛夏_AtomGit暑期开发者成长计划「源启盛夏」暑期校园开发者成长计划旨在激活校园开源力量,通过积分激励、认证扶持、资源倾斜等形式,引导高校组织和开发者完成「入驻 — 建项目 — 做贡献 — 获认证 — 得资源」的完整闭环。无论你是想带领社团入驻平台的组织者,还是希望用代码贡献证明自己的开发者,都能在这里找到属于你的成长路径。Markdown00
XianyuAutoAgent智能闲鱼客服机器人系统:专为闲鱼平台打造的AI值守解决方案,实现闲鱼平台7×24小时自动化值守,支持多专家协同决策、智能议价和上下文感知对话。Python03
new-apiAI模型聚合管理中转分发系统,一个应用管理您的所有AI模型,支持将多种大模型转为统一格式调用,支持OpenAI、Claude、Gemini等格式,可供个人或者企业内部管理与分发渠道使用。🍥 A Unified AI Model Management & Distribution System. Aggregate all your LLMs into one app and access them via an OpenAI-compatible API, with native support for Claude (Messages) and Gemini formats.TSX026
AscendNPU-IRAscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优C++0313
mllm轻量化的端侧多模态推理框架,支持多种硬件后端https://ubiquitouslearning.github.io/mllm/C++00