Yjs 实战指南:从零跑通 CRDT 实时协同编辑到生产
【免费下载链接】yjsShared data types for building collaborative software项目地址: https://gitcode.com/GitHub_Trending/yj/yjs
Yjs 是一个 CRDT(不依赖中心服务器就能自动合并冲突的数据结构)框架,把 Map、Array、Text 变成可共享的数据类型:任何一端的修改会自动分发到其他节点并无缝合并。实时协同、离线编辑、撤销重做、版本快照全部内置,是构建协作软件的核心层。
⚡ 5 分钟克隆并跑通测试
这个仓库是 Node.js 库本身,没有单独的构建步骤,所以"跑通"的标志是测试套件全绿。确认本机装了 Node.js 22 以上(npm 8+),然后几条命令就能完成克隆、装依赖和验证:
git clone https://gitcode.com/GitHub_Trending/yj/yjs cd yjs && npm install npm test测试覆盖共享数组、Map、文本、XML 类型,以及撤销重做、快照等核心路径。跑完可以写个小 demo 找手感:创建一个 Doc,用doc.getArray('items')拿到共享数组并 push 一个元素,就完成了一次共享写入。
它还能做什么:CRDT 内核与生态
往内部看,Yjs 本质是一个列表 CRDT:数组是任意项的列表,文本是字符的列表(连续字符还会合并成单个节点省空间),Map 也被折成列表,每个 key 以最后写入的项为准。每个客户端首次写入时拿到一个随机 53 位 clientID,并发操作的排序完全由它决定,因此任何节点算出的合并结果都一致。
Yjs 本身不绑死网络层:点对点(P2P)直连、WebSocket 中转都行。编辑器生态提供了 ProseMirror、Quill、CodeMirror 等富文本编辑器的现成绑定,光标和选区天然共享;服务端有 Node.js 同步服务器可用,状态能持久化到数据库。共享光标、撤销/重做、版本快照都是一等能力,项目对大文档和无限用户数做了专门调优,实现细节见 INTERNALS.md。
部署前必查三件事
上生产前关注三个方向:同步传输层选 P2P 还是服务器中转,文档状态持久化放在哪(通常是 Node.js 服务器加数据库);快照的存储格式与版本兼容性;大文档下的内存占用与垃圾回收策略。这些细节建议直接对照官方文档 docs.yjs.dev,结合自己的场景落地。
【免费下载链接】yjsShared data types for building collaborative software项目地址: https://gitcode.com/GitHub_Trending/yj/yjs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考