Храните документ как структурированные узлы и операции, а совместное редактирование стройте на CRDT или OT. Для офлайн-режима удобен CRDT с локальным журналом изменений.
Конструктор совместного текстового редактора
Храните документ как структурированные узлы и операции, а совместное редактирование стройте на CRDT или OT. Для офлайн-режима удобен CRDT с локальным журналом изменений.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Разработать текстовый редактор, поддерживающий совместную работу над документом. Требуется реализовать функции редактирования текста, применение стилей (жирный, курсив, изменение цвета и размера шрифта, заголовки), возможность работы в офлайн‑режиме, гибкую систему контроля доступа (по ссылке или ограничение для конкретных пользователей) и отображение списка недавно открытых файлов.
Ответ
Храните документ как структурированные узлы и операции, а совместное редактирование стройте на CRDT или OT. Для офлайн-режима удобен CRDT с локальным журналом изменений.
Базовая схема: клиентский редактор → локальная копия и очередь операций → сервер синхронизации → журнал и периодические snapshots. WebSocket передаёт изменения и presence; курсоры участников не обязаны попадать в постоянную историю.
Формат документа хранит абзацы, заголовки и атрибуты текста, а не произвольный HTML. Алгоритм слияния должен поддерживать форматирование, а не только вставку символов. После восстановления сети клиент отправляет накопленные операции, удаляет подтверждённые и получает изменения других участников.
Сервер проверяет права на каждую запись. Ссылка-доступ — отзываемый ограниченный токен; локальное редактирование после отзыва прав не означает право загрузить изменения. Такие правки можно сохранить пользователю отдельной копией. Недавние документы — пользовательский индекс со временем открытия. Нужны ограничение размера, snapshots, резервное копирование и миграции формата.