Модульные строительные блоки для создания приложений для совместной работы, таких как Google Docs и Figma.

Вы когда-нибудь задумывались о том, как такие инструменты, как Google Docs или figma, позволяют нескольким пользователям одновременно работать над документом? Задумывались ли вы когда-нибудь, насколько сложно и сложно создать приложение для совместной работы, которое хорошо масштабируется?

Сегодня я рад представить вам Yjs — революционный инструмент, меняющий правила игры в сфере совместного редактирования.

Yjs расширяет границы существующих решений для совместного редактирования, которые обычно полагаются на единственный источник достоверной информации — центральный сервер — для разрешения конфликтов.

Скорее, Yjs игнорирует необходимость центрального источника истины и прокладывает путь для проектирования серверной части, опираясь на архитектуру распределенной системы.

Это проектное решение создает потенциал для создания приложений, способных к безграничной масштабируемости.

Что такое Yjs?

Проще говоря, Yjs — это набор модульных строительных блоков для создания приложений для совместной работы, таких как Google Docs и figma. Он специально разработан для того, чтобы изменить восприятие онлайн-сотрудничества, устраняя ограничения, налагаемые центральным сервером.

Будучи независимым от платформы, Yjs идеально адаптируется к предпочтительному выбору разработчика технологического стека и совместим со множеством популярных языков программирования.

Yjs создает благодатную почву для разработки масштабируемых, эффективных и общих возможностей редактирования.

Давайте посмотрим на фрагмент кода, взятый из официальной документации, чтобы продемонстрировать базовое использование Yjs, в частности, показывая, как общие типы автоматически синхронизируются между несколькими документами Yjs, предлагая разработчикам беспрепятственное сотрудничество при редактировании документов.

import * as Y from 'yjs'

// Yjs documents are collections of
// shared objects that sync automatically.
const ydoc = new Y.Doc()
// Define a shared Y.Map instance
const ymap = ydoc.getMap()
ymap.set('keyA', 'valueA')

// Create another Yjs document (simulating a remote user)
// and create some conflicting changes
const ydocRemote = new Y.Doc()
const ymapRemote =…