哪些CRDT可用于实现功能齐全的协作富文本编辑器?

时间:2016-07-21 18:56:21

标签: distributed-computing richtext collaborative-editing crdt

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

我有兴趣构建这样一个编辑器,并且需要知道CRDT是否能够在一般性方面处理这个问题。

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

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

Ritzy文档链接到描述基于CRDT的因果树(pdf)的论文,但我并不理解本文。

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

1 个答案:

答案 0 :(得分:1)

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

实际上,线性结构的CRDT就足够了。您可以将格式视为标记(即格式开始和格式结束)。当两个用户同时格式化/插入文本时,这也具有获得预期结果的优点。

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

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