1

私は CRDT を研究しており、それらが Ritzy 、 TreeDoc、WOOT、Logootなどの共同エディターを構築するために使用されていることを理解しています。

私はそのようなエディタを構築することに興味があり、CRDT がこの問題を一般的に処理できることが知られているかどうかを知る必要があります。

詳しく説明すると、リッチ テキスト ドキュメント (html と考えてください) はツリー構造を持っていますが、ノードは異種です。ブロック要素、インライン要素、テーブル、リストなどがあります。さらに、ドキュメントにはスタイルとスタイルシート (css など) が埋め込まれている場合があります。最後に、取り消しは不可欠です。

上記のエディタは、テーブル、埋め込みスタイルシート、元に戻す/やり直しなどの高度な機能を処理しません。

Ritzy のドキュメントは、CRDT ベースの因果ツリー ( pdf ) を説明する論文にリンクしていますが、私はこの論文をよく理解していません。

因果樹 CRDT の背後にある基本原理は何ですか? 上記の異種ツリーを処理するのに十分強力ですか? あるいは、このシナリオを処理できる他の CRDT はありますか?

4

1 に答える 1

2

リッチテキスト用の CRDT の実装は、それほど単純ではありません。一部の CRDT は、ツリーの構築に使用できます。したがって、リッチテキストの単純なアプローチは、ツリーとして構築することです。ノードは、'イタリック' などの形式でテキストのブロックを表します。テキストをフォーマットするには、通常、テキストを削除して、そのフォーマットの新しいノードを挿入する必要があります。ただし、これは常に期待どおりに機能するとは限りません。たとえば、2 人のユーザーが同じテキストを同時にフォーマットすると、フォーマットされたテキストは収束後に 2 回挿入されます (ユーザー 1 はテキストを削除し、新しいノードを挿入します。ユーザー 2 は同じテキストを削除し、新しいノードを挿入します)。新しいノード)。私の知る限り、この問題を解決する CRDT はありません。

実際には、線形構造の CRDT で十分です。フォーマットをマーカーとして認識できます (つまり、フォーマットの開始とフォーマットの終了)。これには、2 人のユーザーが同時にテキストの書式設定/挿入を行うときに、期待どおりの結果が得られるという利点もあります。

このアプローチの実用的な実装については、Yjsを確認してください。例のセクションには、リッチ テキスト エディターの実際の例が含まれています。

(完全な開示: 私は Yjs の作成者です)

于 2016-10-23T23:07:59.820 に答える