用途:为 Epicenter 项目提供 Yjs 14 的实践模式,覆盖行文档设计、事务与来源、持久化、同步和存储优化。仅面向 @y/y 14,不兼容 Yjs 13、y-indexeddb 或兼容读取器。
主要能力:Yjs 是网络无关的 CRDT 框架,提供状态向量、更新与感知行为。用 Y.encodeStateVector(doc) 描述本地时钟,用 Y.encodeStateAsUpdateV2(doc, remoteStateVector) 只发送缺失更新;从 updateV2 事件持久化与传输字节,用 Y.applyUpdateV2(doc, update, origin) 重放。多写用户操作包在 doc.transact(() => { ... }, origin) 中,事务来源用于过滤提供者回声、应用操作与撤销跟踪。Y.UndoManager 需限定到具体共享类型,设置 trackedOrigins、captureTimeout,并在逻辑命令间调用 stopCapturing()。协作光标用相对位置。
使用方式:一个应用是一个 Y.Doc,根为 tables:<name> 与 kv。行是表根上的嵌套 Y.Type 属性,字段值是行上的 JSON 属性,内容节点位于行的保留内容键。值整体替换,节点就地编辑。表订阅在形状变化时触发并给出受影响行 ID;table.watch(node) 监听单个内容节点;kv.subscribe 监听声明键变化。持久化使用 SQLite 的 _updates 表与浏览器 IndexedDB,先水合再挂载 updateV2 监听器。同步每应用一个套接字,连接 /api/store/v1/sync,带命名空间与游标。
限制:浏览器升级仅通过一个 bearer.<token> 子协议认证,不使用 cookie 或查询串凭据。大更新按 CHUNK_BYTES 分块。感知状态暂未实现,若添加必须为临时且不得持久化。不要添加独立 IndexedDB 提供者或第二文档存储。缺失事实:具体安装命令、收费与平台信息暂未提供。