Почему совместное редактирование на основе CRDT выигрывает для живого кодирования
Два подхода к сотрудничеству в реальном времени
Когда два человека одновременно редактируют один файл, редактор должен слить их изменения без потери данных или необычного мерцания. Существуют два основных подхода:
- Operational Transform (OT). Каждое редактирование отправляется как операция; центральный сервер трансформирует входящие операции, чтобы применить их в правильном порядке. Используется Google Docs.
- Conflict-free Replicated Data Types (CRDTs). Каждое редактирование содержит достаточно метаданных (обычно уникальный ID и логические часы), чтобы любые два клиента сходились к одному состоянию независимо от порядка прибытия. Используется Figma, Linear и большинством современных collab инструментов.
Для живых интервью с кодированием конкретно, CRDTs выигрывают.
Почему CRDTs выигрывают для интервью
Интервью происходят на гостиничном Wi-Fi, мобильных хотспотах и корпоративных сетях с агрессивными прокси. Три вещи идут не так:
- Краткие отключения. 4-секундный сбой сети в середине печати.
- Асимметричная задержка. Нажатия клавиш кандидата достигают сервера за 80мс; интервьюера — за 400мс.
- Хаос переподключения. Обе стороны снова подключаются с расходящимся состоянием.
Редакторы на основе OT требуют, чтобы сервер опосредствовал каждую операцию. Когда сеть глючит, редактирование накапливается, и переподключения часто производят видимое мерцание, потерянные символы, или — в худшем случае — молчаливую потерю состояния. Кандидаты растеряны, интервьюеры винят кандидата.
CRDTs молча обрабатывают все три сценария. Каждый клиент может немедленно применить локальное редактирование; слияния происходят при переподключении без видимого воздействия на пользователя. Редактор ощущается как оффлайн-первый — что важнее, чем люди думают, когда вы также работаете с проверками целостности поверх слоя редактирования.
Почему Yjs + Monaco стали стандартом
Yjs — это наиболее боевой CRDT library для текста. Он чисто сочетается с Monaco — редактором, который питает VS Code — через y-monaco. Комбинация дает вам:
- Полный опыт редактора VS Code (IntelliSense, мультикурсор, все привязки клавиш)
- Реальное сотрудничество, которое работает на плохих сетях
- Несколько курсоров, обмен выделением, осведомленность присутствия
- Боевая проверка в масштабе
ClarityHire построена на Monaco + Yjs именно по этим причинам. Редактирование кода кандидата достигает интервьюера за <50мс на здоровом соединении и выживает сбои сети, которые подрывают редактор, опосредствуемый сервером. Это важно как для парного программирования раундов, так и для традиционных живых интервью с кодированием, где любое мерцание читается как вина кандидата.
Что это значит на практике
Если вы оцениваете платформу живого кодирования, имитируйте плохую сеть во время вашей пробы. Дросселируйте до 3G в DevTools, отключите соединение на 5 секунд, посмотрите, что происходит. Инструменты на основе CRDT восстанавливаются невидимо. Другие нет.