<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Yjs | 锤子前端</title><description>Now vibe coding, so learning hammer FE ?</description><link>https://channel.meo-ai.com</link><item><title>《关于协作编辑的谎言（第二部分）：为什么我们不用Yjs》</title><link>https://channel.meo-ai.com/posts/575</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/575</guid><pubDate>Wed, 18 Mar 2026 01:39:20 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《关于协作编辑的谎言（第二部分）：为什么我们不用Yjs》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23ProseMirror&quot; title=&quot;#ProseMirror&quot;&gt;#ProseMirror&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CRDT&quot; title=&quot;#CRDT&quot;&gt;#CRDT&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%8D%8F%E4%BD%9C%E7%BC%96%E8%BE%91&quot; title=&quot;#协作编辑&quot;&gt;#协作编辑&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96&quot; title=&quot;#性能优化&quot;&gt;#性能优化&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Yjs&quot; title=&quot;#Yjs&quot;&gt;#Yjs&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%AE%9E%E6%97%B6%E5%8D%8F%E4%BD%9C&quot; title=&quot;#实时协作&quot;&gt;#实时协作&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;本文是Moment.dev团队关于协作编辑算法分析的第二部分，作者详细阐述了为何在生产环境中放弃Yjs而选择基于ProseMirror-collab的简单方案。文章指出Yjs存在严重的性能问题（每次协作编辑会销毁重建整个文档）、与文档Schema冲突、权限控制困难、调试困难以及墓碑数据占用内存等问题。作者认为，除非真正需要无主节点的P2P架构，否则40行代码的&quot;简单方案&quot;在性能、可维护性和开发体验上都优于复杂的CRDT实现。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;- Yjs存在严重性能缺陷：每次协作编辑会销毁并重建整个文档，导致60fps目标难以达成，影响NodeView、插件状态、撤销功能和光标位置管理&lt;br /&gt;- 简单方案仅需40行代码：使用prosemirror-collab库，通过单一权威节点管理文档版本和事务，支持乐观更新、离线编辑和网络中断恢复&lt;br /&gt;- Yjs与文档Schema冲突：在无主节点架构下难以验证事务有效性，可能导致数据永久丢失，升级时尤其危险&lt;br /&gt;- 权限控制复杂化：需要将Yjs的XML更新预测转换为ProseMirror事务来判断权限，实现难度大&lt;br /&gt;- 墓碑数据问题：Yjs需保留删除标记，导致内存持续增长或数据丢失风险，而简单方案通过数据库存储步骤即可解决&lt;br /&gt;- 调试困难：CRDT仅保证最终一致性，难以区分暂时分歧与真正错误，调试工具受限&lt;br /&gt;- 核心观点：技术选型应从最终用户体验出发，而非算法本身；如无P2P刚需，简单方案在各方面均优于CRDT&lt;br /&gt;&lt;br /&gt;文章URL：&lt;a href=&quot;https://www.moment.dev/blog/lies-i-was-told-pt-2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://www.moment.dev/blog/lies-i-was-told-pt-2&quot;&gt;https://www.moment.dev/blog/lies-i-was-told-pt-2&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://moment.dev/blog/lies-i-was-told-pt-2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Lies I was Told About Collaborative Editing, Part 2: Why we don&apos;t use Yjs / Moment devlog&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Lies I was Told About Collaborative Editing, Part 2: Why we don&apos;t use Yjs / Moment devlog&quot; src=&quot;/static/https://cdn4.telesco.pe/file/YVXaUzBE8-9TDW2QQrSSbabfgg71zJ4YfK9str6-S1LPODRrO0GTgZm9XVC005_t5HR8VqdNrsgcUwQyA9CcsGyd1JTNXiYmfD35KPvxoWVvTV3w40qwfsqy8doKw0ZtWIufS8kkP6b_7C_qBXZmPDelkDueKKd_mZLaVGpRdnWPevjv76nE543DoXGcMtepNx9ppudeaLhaphSNg-17nX4wJVoKz43YqT9z_ynPXioKsnRqKvzAi1NxlO07pXRzyhwn5GcDxgfJ6WE6NlLa5PhPeeJh7VLRKBwCq1-crT8pqRc_IVTVDnEToydSWbK2EBXIWObDBA27HcLh3qeT-Q.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  
  
&lt;/a&gt;</content:encoded></item></channel></rss>