Обновления продукта

Почему совместное редактирование на основе CRDT выигрывает для живого кодирования

ClarityHire Team(Editorial)2 min read

Два подхода к сотрудничеству в реальном времени

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

  • Operational Transform (OT). Каждое редактирование отправляется как операция; центральный сервер трансформирует входящие операции, чтобы применить их в правильном порядке. Используется Google Docs.
  • Conflict-free Replicated Data Types (CRDTs). Каждое редактирование содержит достаточно метаданных (обычно уникальный ID и логические часы), чтобы любые два клиента сходились к одному состоянию независимо от порядка прибытия. Используется Figma, Linear и большинством современных collab инструментов.

Для живых интервью с кодированием конкретно, CRDTs выигрывают.

Почему CRDTs выигрывают для интервью

Интервью происходят на гостиничном Wi-Fi, мобильных хотспотах и корпоративных сетях с агрессивными прокси. Три вещи идут не так:

  1. Краткие отключения. 4-секундный сбой сети в середине печати.
  2. Асимметричная задержка. Нажатия клавиш кандидата достигают сервера за 80мс; интервьюера — за 400мс.
  3. Хаос переподключения. Обе стороны снова подключаются с расходящимся состоянием.

Редакторы на основе OT требуют, чтобы сервер опосредствовал каждую операцию. Когда сеть глючит, редактирование накапливается, и переподключения часто производят видимое мерцание, потерянные символы, или — в худшем случае — молчаливую потерю состояния. Кандидаты растеряны, интервьюеры винят кандидата.

CRDTs молча обрабатывают все три сценария. Каждый клиент может немедленно применить локальное редактирование; слияния происходят при переподключении без видимого воздействия на пользователя. Редактор ощущается как оффлайн-первый — что важнее, чем люди думают, когда вы также работаете с проверками целостности поверх слоя редактирования.

Почему Yjs + Monaco стали стандартом

Yjs — это наиболее боевой CRDT library для текста. Он чисто сочетается с Monaco — редактором, который питает VS Code — через y-monaco. Комбинация дает вам:

  • Полный опыт редактора VS Code (IntelliSense, мультикурсор, все привязки клавиш)
  • Реальное сотрудничество, которое работает на плохих сетях
  • Несколько курсоров, обмен выделением, осведомленность присутствия
  • Боевая проверка в масштабе

ClarityHire построена на Monaco + Yjs именно по этим причинам. Редактирование кода кандидата достигает интервьюера за <50мс на здоровом соединении и выживает сбои сети, которые подрывают редактор, опосредствуемый сервером. Это важно как для парного программирования раундов, так и для традиционных живых интервью с кодированием, где любое мерцание читается как вина кандидата.

Что это значит на практике

Если вы оцениваете платформу живого кодирования, имитируйте плохую сеть во время вашей пробы. Дросселируйте до 3G в DevTools, отключите соединение на 5 секунд, посмотрите, что происходит. Инструменты на основе CRDT восстанавливаются невидимо. Другие нет.

yjscrdtmonaco editorсовместное редактирование

Похожие статьи