Совместный редактор в реальном времени — это тип программного обеспечения или веб-приложения для совместной работы , которое обеспечивает совместное редактирование в реальном времени , одновременное редактирование или редактирование в реальном времени одного и того же цифрового документа , компьютерного файла или данных, хранящихся в облаке , таких как онлайн-таблица , Word. обработка документа, базы данных или презентации — одновременно разными пользователями на разных компьютерах или мобильных устройствах с автоматическим и практически мгновенным объединением их правок.
Редактирование в реальном времени выполняет автоматическую, периодическую, часто почти мгновенную синхронизацию изменений всех онлайн-пользователей, когда они редактируют документ на своем устройстве. Это сделано для того, чтобы избежать или свести к минимуму конфликты редактирования .
При асинхронном совместном редактировании (т. е. не в режиме реального времени, с задержкой или в автономном режиме) каждый пользователь обычно должен вручную отправлять (публиковать, отправлять или фиксировать), обновлять (обновлять, извлекать, загружать или синхронизировать) и (если возникают конфликты редактирования) объединять их правки. Из-за отложенного характера асинхронного совместного редактирования несколько пользователей могут в конечном итоге редактировать одну и ту же строку, слово, элемент, данные , строку или поле , что приводит к конфликтам редактирования , которые требуют ручного слияния или перезаписи редактирования, требуя от пользователя выбора, какие изменения использовать. или (в зависимости от системы и настроек) автоматически перезаписывать свои правки или правки других людей с предупреждением или без него.
Первый экземпляр совместного редактора в реальном времени был продемонстрирован Дугласом Энгельбартом в 1968 году в книге «Мать всех демонстраций» . На появление широко доступных реализаций этой концепции потребовались десятилетия.
Часть программного обеспечения под названием Instant Update была выпущена для классической Mac OS в 1991 году компанией ON Technology . [1] [ нужен лучший источник ] Он позволял редактировать один документ в реальном времени нескольким пользователям через локальную сеть и полагался на сервер рабочей группы .
Интерес к совместному редактированию в реальном времени через Интернет привел к развитию MoonEdit и SubEthaEdit в 2003-2005 годах, а вскоре за ними последовал Gobby .
С появлением технологии Ajax и функции «редактирования контента» в браузерах совместное редактирование через Интернет в режиме реального времени стало частью феномена Web 2.0 примерно в 2005 году. В частности, продукт под названием Writely вызвал взрывной рост числа пользователей и был куплен. Google в марте 2006 года (так называемый Google Docs , а затем переименованный в Google Drive ). Он обеспечивал одновременное редактирование всего документа, хотя изменения, вносимые другими пользователями, отражались только после опроса клиентской программой сервера (примерно каждые полминуты). [ нужна цитация ] Еще одним ранним веб-решением был JotSpotLive, в котором одновременное построчное редактирование было доступно практически в реальном времени. [2] Однако после покупки Google материнской компании JotSpot в ноябре 2006 года сайт был закрыт. Сайты Google были запущены в феврале 2007 года как рефакторинг JotSpot, [3] [4] [5] [6] , но в них отсутствуют многопользовательские возможности работы в режиме реального времени, как в JotLive. Проекты Synchroedit (форматированный текст) и MobWrite (обычный текст) — это две более поздние попытки с открытым исходным кодом заполнить пробел в совместном редактировании на основе браузера в реальном времени, хотя они до сих пор не могут достичь истинной производительности в реальном времени, особенно на масштабная архитектура. [ нужна цитата ]
В 2009 году Google начал бета-тестирование Google Wave , среды для совместной работы в реальном времени, которая, как надеялась Google, в конечном итоге заменит электронную почту и обмен мгновенными сообщениями. [ нужна цитация ] EtherPad был приобретен компанией Google, которая выделила команду EtherPad для работы в рамках проекта Wave. Однако в августе 2010 года Google объявил в своем блоге [7] , что решил прекратить разработку Wave как отдельного проекта из-за недостаточного признания пользователями. После того, как Google выпустил заброшенный исходный код EtherPad как открытый исходный код в декабре 2009 года, сообщество взяло на себя его разработку и произвело полную переработку под названием Etherpad lite , которая полностью написана на JavaScript и построена поверх Node.js. Еще одним заметным инструментом, основанным на технологии оперативной трансформации , является CKEditor . [8] В 2020 году наблюдался всплеск интереса к этой концепции, поскольку Microsoft также недавно выпустила свою среду Fluid, которая опирается на новую технологию Total Order Broadcast, в отличие от OT или CRDT. [9] В настоящее время Fluid не зависит от платформы. Microsoft заявляет, что он еще не готов к использованию в производстве. [10]
В июне 2016 года Collabora Productivity выпустила версию 1.0 Collabora Online , онлайн-офисного пакета с открытым исходным кодом, использующего технологию LibreOffice . Его можно интегрировать в любой веб-сайт с помощью нескольких строк кода. Существует комплект разработки программного обеспечения с примером кода интеграции на нескольких языках Node.js , PHP , Python , ReactJS и .NET . Они имеют спецификации API , обеспечивающие функциональную интеграцию с настраиваемыми пользовательскими интерфейсами. [11] [12] [13] Поскольку документы Collabora Online остаются на сервере, каждый пользователь одновременно использует один и тот же документ, что позволяет редактировать только один документ в режиме реального времени и в интерактивном режиме без дополнительных задержек или задержек, чтобы видеть, как печатают другие пользователи. . Это позволяет избежать необходимости блокировки абзацев в текстовых документах. Он обеспечивает совместное редактирование в режиме реального времени текстовых документов, электронных таблиц, презентаций, рисунков и векторной графики.
Недавно совместное редактирование в реальном времени вернулось в автономные приложения для редактирования текста с расширениями для Atom и Visual Studio Code , выпущенными в 2020 году. [14] [15]
Совместное редактирование в режиме реального времени может происходить онлайн в веб-приложениях, таких как Microsoft Office в Интернете (ранее Office Online ), который поддерживает одновременное онлайн-редактирование ( через Интернет ) (которое Microsoft называет «совместным авторством») документов Word . Таблицы Excel , PowerPoint и другие документы Microsoft Office , хранящиеся в облачном хранилище Office.com , OneDrive или SharePoint , а также в Google Docs и других приложениях Google Workspace для повышения производительности (офисный пакет) для совместного онлайн-редактирования текстовых редакторов и других документов, хранящихся на Google Диске . Совместное редактирование в режиме реального времени также может осуществляться гибридным способом, например, с помощью Power Sheet BI для Excel [16] при совместном редактировании в автономном режиме, через Интернет и онлайн в настольном программном обеспечении, а также в веб-приложениях и мобильных приложениях, которые могут автоматически синхронизироваться с мгновенным доступом к истории версий. В 2020 году возобновился интерес к встраиванию этих приложений в безопасные веб-приложения, особенно для бизнес-приложений, при этом Microsoft и Vaadin взяли на себя ведущую роль в разработке специализированных бэкэндов для совместной работы в реальном времени, которые справляются со сложностями синхронного обмена данными в реальном времени, что разработчики могут использовать через API. [17] [18] В 2013 году Mozilla выпустила библиотеку javascript TogetherJS, которая добавляет совместное редактирование в реальном времени в любое веб-приложение через систему обмена сообщениями и, опционально, алгоритм оперативного преобразования для синхронизации форм. [19]
Vaadin Ltd., поставщик платформы Vaadin, выпустила версию 1.0 своей системы совместной работы в октябре 2020 года [20] с целью позволить разработчикам быстро встраивать функции совместной работы и редактирования в реальном времени в любое веб-приложение с серверной частью Java. используя несколько строк кода (для конкретных случаев использования через их, все еще ограниченные, высокоуровневые API). [21] В настоящее время эта функция поддерживает Java, хотя поставщик отмечает, что API на основе TypeScript также скоро появится, что соответствует недавнему продолжающемуся расширению платформы Vaadin, позволяющему в будущем также создавать возможности создания пользовательского интерфейса на основе TypeScript с помощью предстоящей платформы Fusion. [22] [23]
Сложность решений для совместного редактирования в реальном времени связана с задержками связи. Теоретически, если бы связь была мгновенной, то создание совместного редактора в реальном времени было бы не сложнее, чем создание однопользовательского редактора, поскольку документ можно было бы редактировать, используя алгоритм, аналогичный следующему:
Однако скорость связи ограничена задержкой сети. Это создает фундаментальную дилемму: пользователям нужно, чтобы их собственные правки включались в документ мгновенно, но если они вносятся мгновенно, то из-за задержки связи их правки обязательно должны быть вставлены в разные версии документа.
Пример иллюстрирует эту проблему. Предположим, Боб и Алиса начинают с документа, содержащего слово Мэри . Боб удаляет «М», затем вставляет «Н», чтобы изменить слово на «Гэри» . Алиса, прежде чем получить какое-либо редактирование от Боба, удаляет «r», затем удаляет «a», чтобы изменить его на My . И Боб, и Алиса получат изменения, примененные к версиям документа, которые никогда не существовали на их машинах.
Таким образом, задача совместного редактирования в реальном времени состоит в том, чтобы выяснить, как именно применять изменения удаленных пользователей, которые изначально были созданы в версиях документа, которые никогда не существовали локально, и которые могут конфликтовать с собственными локальными изменениями пользователя.
Самые сложные решения решают эту проблему таким образом, что не требуется сервер, не используется блокировка (все пользователи могут свободно редактировать все части документа одновременно) и поддерживается любое количество пользователей (ограниченное только ресурсами). компьютеров). UNA и SubEthaEdit — примеры двух программ, использующих этот подход.
Хотя эти сложные подходы обеспечивают наилучшее взаимодействие с пользователем , базовый редактор для совместной работы также может быть создан в модели клиент-сервер . В клиент-серверном сценарии одному из экземпляров редактора назначается роль сервера совместной работы при открытии документа. Этот сервер обеспечивает синхронизацию других редакторов, определяя задержку в сети и выступая в качестве сервера синхронизации времени . Сервер получает уведомления с отметкой времени об изменениях, внесенных в документ другими пользователями. Он определяет, как эти изменения должны повлиять на его локальную копию, и передает свои изменения в пул совместной работы. В некоторых моделях изменения не отражаются на клиенте до тех пор, пока не будет получен официальный ответ от сервера, даже если эти изменения были внесены локально.
Этот подход, хотя и значительно менее мощный, позволяет обеспечить базовое сотрудничество при относительно низких затратах. Это делает его предпочтительным в ситуациях, когда ресурсы обработки ограничены. NetSketch — пример программы, использующей эту модель.
В прошлом Microsoft и IBM работали над добавлением средств совместной работы к своим существующим архитектурам. [24] Хотя эти подходы «рабочего пространства» позиционируются как совместная работа в реальном времени, они требуют либо блокировки документа (чтобы редактировать его одновременно мог только один человек), либо «согласования» конфликтующих изменений, что обычно считается пользователями неудовлетворительным. . [ нужна цитата ]