【问题标题】:Which CRDTs can be used to implement a full-featured collaborative rich text editor?哪些 CRDT 可用于实现功能齐全的协作富文本编辑器?
【发布时间】:2016-07-21 18:56:20
【问题描述】:

我一直在研究 CRDT,了解到它们已被用于构建协作编辑器,包括 Ritzy、TreeDoc、WOOT 和 Logoot。

我对构建这样的编辑器很感兴趣,并且需要知道 CRDT 是否能够在一般情况下处理这个问题。

详细说明:富文本文档(想想 html)具有树结构,但节点是异构的。有块元素、行内元素、表格、列表等。此外,文档中可能嵌入了样式和样式表(例如 css)。最后,撤消是必不可少的。

上面列出的编辑器不处理更高级的功能,例如表格、嵌入式样式表和撤消/重做。

Ritzy 文档链接到描述基于 CRDT 的因果树的论文 (pdf),但我不太了解这篇论文。

因果树 CRDT 背后的基本原理是什么?处理上述异构树是否足够强大?或者,是否有其他 CRDT 可以处理这种情况?

【问题讨论】:

标签: distributed-computing richtext collaborative-editing crdt


【解决方案1】:

富文本的 CRDT 的实现不是很直接。一些 CRDT 可用于构建树。因此,富文本的天真方法是将其构建为树。然后,一个节点将表示具有诸如“斜体”之类的格式的文本块。为了格式化文本,您通常必须删除它,然后插入一个具有该格式的新节点。但这并不总是按预期工作:例如,如果两个用户同时格式化相同的文本,则格式化后的文本会在收敛后插入两次(User1 删除文本,并插入一个新节点。User2 删除相同的文本,并插入一个新节点)。据我所知,没有 CRDT 可以解决这个问题。

实际上,线性结构的 CRDT 完全足够了。您可以将格式实现为标记(即格式开始和格式结束)。这还有一个好处是,当两个用户同时格式化/插入文本时,您可以获得预期的结果。

有关此方法的有效实施,您可以查看Yjs。示例部分包含富文本编辑器的工作示例。

(完全披露:我是Yjs的作者)

【讨论】:

    猜你喜欢
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多