Yjs

文档模型

每个端本地都会有一个文档模型,由代码 new Y.doc()生成, 实例结构如图,gc字段会涉及版本恢复问题,比如针对删除集的回收,如果需要版本恢复要设置false。

clientId是本客户端的标识id

共享数据类型有两个,一个是存用户信息,另外一个是存文档信息(这里也是由网络层provider和编辑器binding层去做的)。文档信息是嵌套的,这里不好看,可以看下面这个

store层里面clients字段记录着所有客户端的数据内容,也就是item集合,可以看到388这个客户端已经打上了19次哈希坐标。

ydoc.transact(()) transact是ydoc更新的一次事务,比如在apply updates的时候 放在一次事务里,消息会在合并完全之后才发送,并且只会发送一条

item

item是yjs Ymodel数据的底层双向链表结构的节点单元。

snapshot

Yjs的snapshot存的是每个客户端的item节点位置,比如我点到这个版本:

snapshot存的是这个clientId到clock id的映射,比如这个版本是客户端388,节点是7