Este artículo de Moment.dev explora por qué el equipo decidió no utilizar Yjs, una biblioteca popular para edición colaborativa, a pesar de su amplia adopción. La primera parte de la serie ya había señalado problemas con la corrupción de documentos en algoritmos colaborativos, especialmente en escenarios offline. Esta segunda parte profundiza en los problemas encontrados al intentar integrar Yjs en un editor de texto de producción, incluso en entornos de colaboración en vivo.
El núcleo del problema radica en la forma en que Yjs resuelve los conflictos de edición directa. Para lograr una optimización, Yjs reconstruye el documento completo en cada pulsación de tecla, lo que genera una cascada de problemas de rendimiento y compatibilidad. Esto incluye la invalidación de plugins, la degradación del rendimiento de la gestión de deshacer y rehacer, la inestabilidad de la identidad de los nodos y problemas con el mapeo de posiciones. El artículo cita una discusión pública donde el autor de Yjs confirma que este comportamiento es intencional, aunque reconocido como problemático.
Como alternativa, el artículo presenta prosemirror-collab, una biblioteca menos conocida que ofrece un rendimiento superior y evita los problemas de reconstrucción completa del documento. prosemirror-collab utiliza un modelo de autoridad centralizada (que puede ser un portátil compartido) donde un cliente envía cambios y, si la versión del documento es diferente, debe obtener los cambios más recientes y rebasarlos. Aunque no ofrece la arquitectura peer-to-peer sin maestro (masterless) que proporciona Yjs, el artículo argumenta que para la mayoría de los casos de uso, la diferencia es insignificante, especialmente considerando la complejidad y los problemas de rendimiento que introduce Yjs.
El artículo incluye una demostración de código (aproximadamente 40 líneas) que ilustra la simplicidad y eficiencia del enfoque prosemirror-collab. Si bien la reconciliación offline siempre produce resultados impredecibles con cualquier algoritmo (incluidos CRDTs), el punto clave es que prosemirror-collab ofrece un rendimiento comparable a CRDTs con una complejidad significativamente menor. El artículo concluye instando a la comunidad a reconsiderar la dependencia de Yjs y a explorar alternativas más eficientes y estables.
