首页
/ Loro-CRDT 1.5.0版本发布:增强实时协作能力的创新特性

Loro-CRDT 1.5.0版本发布:增强实时协作能力的创新特性

2025-06-12 11:39:12作者:尤辰城Agatha

Loro是一个基于CRDT(Conflict-Free Replicated Data Type)技术的分布式协作框架,它通过创新的数据结构设计解决了分布式系统中数据一致性的难题。在1.5.0版本中,Loro引入了两个重要的新特性:pre-commitfirst-commit-from-peer钩子机制,以及全新的EphemeralStore临时状态管理方案,进一步提升了实时协作场景下的开发体验和性能表现。

强大的提交钩子机制

在分布式协作系统中,操作的提交和同步是核心流程。Loro 1.5.0版本引入了两个关键的钩子机制,为开发者提供了更精细的控制能力。

pre-commit钩子:提交前的最后干预点

pre-commit钩子允许开发者在每次提交操作执行前修改提交参数。这个特性特别有价值,因为在Loro中,commit()方法经常被隐式调用,比如在doc.importdoc.exportdoc.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. 支持细粒度的键值更新,只有变更的部分会被同步
  2. 可以按需编码特定键的数据,减少网络传输量
  3. 提供统一的事件监听机制,简化状态管理

其他改进

1.5.0版本还包含了一些重要的修复和增强:

  • 修复了在文本末尾换行符处应用多个样式的问题
  • 新增了将当前事务中的操作以JSON格式导出的能力

这些改进使得Loro在处理富文本内容时更加可靠,同时也为开发者提供了更强大的调试和分析工具。

总结

Loro 1.5.0通过引入创新的钩子机制和临时状态管理方案,为构建复杂的实时协作应用提供了更强大的工具集。pre-commitfirst-commit-from-peer钩子使得开发者能够更精细地控制协作流程,而EphemeralStore则为临时状态管理提供了更高效的解决方案。这些特性共同推动了CRDT技术在实时协作领域的应用边界,使得开发高性能、可靠的协作应用变得更加简单。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
docsdocs
暂无描述
Markdown
828
5.49 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
494
518
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
786
1.58 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
803
1.14 K
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
973
2.29 K
kernelkernel
deepin linux kernel
C
32
16
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
483
313
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.02 K
769
cannbot-skillscannbot-skills
CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。
Markdown
1.27 K
814
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
652
288