Совместный редактор в реальном времени — это тип программного обеспечения или веб-приложения для совместной работы , которое позволяет осуществлять совместное редактирование в реальном времени , одновременное редактирование или редактирование в реальном времени одного и того же цифрового документа , компьютерного файла или хранящихся в облаке данных , таких как онлайн-таблица , текстовый документ, база данных или презентация , одновременно разными пользователями на разных компьютерах или мобильных устройствах с автоматическим и практически мгновенным объединением их правок.
Редактирование в реальном времени выполняет автоматическую, периодическую, часто почти мгновенную синхронизацию правок всех онлайн-пользователей, когда они редактируют документ на своих устройствах. Это сделано для того, чтобы избежать или минимизировать конфликты редактирования .
При асинхронном совместном редактировании (т. е. не в режиме реального времени, с задержкой или в автономном режиме) каждый пользователь обычно должен вручную отправлять (публиковать, отправлять или фиксировать), обновлять (обновлять, вытягивать, загружать или синхронизировать) и (если возникают конфликты редактирования) объединять свои правки. Из-за отложенной природы асинхронного совместного редактирования несколько пользователей могут в конечном итоге редактировать одну и ту же строку, слово, элемент, данные , строку или поле, что приводит к конфликтам редактирования , которые требуют ручного объединения или перезаписи редактирования, требуя от пользователя выбора, какие правки использовать, или (в зависимости от системы и настроек) автоматической перезаписи своих правок или правок других людей с предупреждением или без него.
Первый пример совместного редактора в реальном времени был продемонстрирован Дугласом Энгельбартом в 1968 году в The Mother of All Demos . Широко доступным реализациям концепции потребовались десятилетия, чтобы появиться.
В 1991 году компания ON Technology выпустила программное обеспечение под названием Instant Update для классической Mac OS . [1] [ необходим лучший источник ] Оно позволяло нескольким пользователям редактировать один документ в режиме реального времени по локальной сети и использовало сервер рабочей группы .
Интерес к совместному редактированию в реальном времени через Интернет привел к разработке MoonEdit и SubEthaEdit в 2003–2005 годах, а вскоре за ними последовал Gobby .
С появлением технологии Ajax и функции «редактирования контента» в браузерах, совместная веб-редакция в реальном времени стала развиваться как часть феномена Web 2.0 около 2005 года. В частности, продукт под названием Writely показал взрывной рост пользователей и был куплен Google в марте 2006 года (то, что стало известно как Google Docs и позже переименовано в Google Drive ). Он обеспечивал одновременное редактирование всего документа, хотя изменения от других пользователей отражались только после опроса клиентской программой сервера (примерно каждые полминуты). [ необходима цитата ] Другим ранним веб-решением был JotSpotLive, в котором построчное одновременное редактирование было доступно почти в реальном времени. [2] Однако после покупки Google материнской компании JotSpot в ноябре 2006 года сайт был закрыт. Google Sites был запущен в феврале 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 Framework , который опирается на новую технологию Total Order Broadcast, в отличие от OT или CRDT. [9] Fluid в настоящее время не зависит от фреймворка. Microsoft заявляет, что он еще не готов к использованию в производстве. [10]
В июне 2016 года Collabora Productivity выпустила V1.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, выпустила V1.0 своего Collaboration Engine в октябре 2020 года [20] с целью позволить разработчикам быстро создавать функции совместной работы и редактирования в реальном времени в любом веб-приложении с бэкэндами Java, используя несколько строк кода (для определенных вариантов использования через их все еще ограниченные высокоуровневые API). [21] Эта функция в настоящее время поддерживает Java, хотя поставщик отмечает, что API на основе TypeScript также находится в разработке, в соответствии с недавним продолжающимся расширением платформы Vaadin, которое также позволит в будущем создавать пользовательский интерфейс на основе TypeScript с помощью ее будущей платформы Fusion. [22] [23]
Сложность решений для совместного редактирования в реальном времени обусловлена задержкой коммуникации. Теоретически, если бы коммуникация была мгновенной, то создание совместного редактора в реальном времени было бы не сложнее создания однопользовательского редактора, поскольку документ можно было бы редактировать с помощью алгоритма, похожего на следующий:
Однако скорость коммуникации ограничена задержкой сети. Это создает фундаментальную дилемму: пользователям нужно, чтобы их собственные правки были включены в документ мгновенно, но если они включены мгновенно, то из-за задержки коммуникации их правки должны быть обязательно вставлены в разные версии документа.
Пример иллюстрирует эту проблему. Предположим, что Боб и Алиса начинают с документа, содержащего слово Mary . Боб удаляет «M», затем вставляет «H», чтобы изменить слово на Hary . Алиса, прежде чем получить какое-либо изменение от Боба, удаляет «r», затем удаляет «a», чтобы изменить его на My . Затем и Боб, и Алиса получат изменения, которые были применены к версиям документа, которые никогда не существовали на их собственных машинах.
Таким образом, задача совместного редактирования в режиме реального времени состоит в том, чтобы точно определить, как применять изменения удаленных пользователей, которые изначально были созданы в версиях документа, никогда не существовавших локально, и которые могут конфликтовать с собственными локальными правками пользователя.
Наиболее сложные решения решают эту проблему таким образом, что не требуют сервера, не используют блокировку (все пользователи могут свободно редактировать все части документа одновременно) и поддерживают любое количество пользователей (ограниченное только ресурсами компьютеров). UNA и SubEthaEdit являются примерами двух программ, которые используют этот подход.
Хотя эти сложные подходы обеспечивают наилучший пользовательский опыт , базовый редактор для совместной работы также может быть создан в клиент-серверной модели . В клиент-серверном сценарии одному из экземпляров редактора назначается роль сервера совместной работы при открытии документа. Этот сервер обеспечивает синхронизацию других редакторов, определяя задержку сети и выступая в качестве сервера синхронизации времени . Сервер получает уведомления с метками времени об изменениях, внесенных в документ другими пользователями. Он определяет, как эти изменения должны повлиять на его локальную копию, и транслирует свои изменения в пул совместной работы. В некоторых моделях изменения не отражаются на клиенте, пока не будет возвращен официальный ответ от сервера, даже если эти изменения были внесены локально.
Этот подход, хотя и значительно менее мощный, позволяет реализовать базовую совместную работу при относительно низких затратах. Это делает его предпочтительным в ситуациях, когда ресурсы обработки ограничены. NetSketch — пример программы, использующей эту модель.
В прошлом Microsoft и IBM работали над добавлением возможностей совместной работы в свои существующие архитектуры. [24] Хотя эти подходы к «рабочему пространству» позиционируются как совместная работа в реальном времени, они требуют либо блокировки документа (чтобы только один человек мог редактировать его одновременно), либо «согласования» конфликтующих изменений, что обычно считается пользователями неудовлетворительным. [ необходима цитата ]