Анатомия редакторов документов: общий код для онлайн и оффлайн-версий редакторов ONLYOFFICE

    Если бы кто-то спросил нас, какой сегодня день, мы бы ответили, что сегодня Большой День. День, когда мы наконец-то релизим десктопные редакторы ONLYOFFICE. Tе самые, что работают без браузера/интернета и отправляют документ прямо на принтер.

    Да, мы те ребята, которые долгое время занимались исключительно онлайн-редакторами, а потом сделали и оффлайн-приложения. Во-первых, несмотря на растущую популярность онлайн-редакторов, большинство пользователей продолжают отдавать предпочтение десктопам. Во-вторых, нам самим давно хотелось уйти от ограничений браузера и ускорить работу с редакторами. 

    Главная черта наших десктопных редакторов в их родстве с  онлайн-редакторами  — их объединяет общий исходный код. В этой статье мы немного расскажем, почему мы приняли решение делать десктопы именно таким образом и раскроем секреты их анатомии, а именно — чем они отличаются от онлайн-версии, как устроены и что мы планируем поменять в будущем.



    В чем преимущества оффлайн-редакторов перед онлайн



    В этой всё еще немного вступительной части текста мы напомним, что на самом деле любим онлайн-редакторы, но не всегда. Некоторые моменты очень огорчают. Посмотрите на смущенное лицо пользователя, который только что попытался скопировать что-то из своего документа, но столкнулся с настоятельной рекомендацией воспользоваться клавиатурой? А этот бедняга, который просто хотел распечатать, а теперь качает pdf? Или вот несчастный с отрубившимся интернетом? В общем, все уже догадались, куда мы клоним. Настольные редакторы обладают несомненными преимуществами, и вот какими:

    • Возможность локальной работы, даже в случае отсутствия Интернета (надеемся, такое с вами не произойдет никогда);
    • Использование ресурсов компьютера. Многие вещи мы можем реализовать лучше, многие функции работают быстрее.
    • Локальные шрифты. Шрифты будут браться с компьютера пользователя, то есть, если пользователь добавит себе на компьютер новый шрифт, то при следующем запуске редактор его тоже подхватит. В случае онлайн-редакторов шрифты сначала нужно установить на сервер.
    • Возможность напрямую отправить документ на печать. В онлайне под печатью документа понимается его сохранение в pdf. После этого пользователь самостоятельно должен принять меры, чтобы отправить документ на принтер.
    • Полноценное использование буфера обмена.
    • Локальная проверка орфографии. Это просто быстрее, чем онлайн-версия, в которой слово для проверки отправляется на сервер проверки орфографии.
    • Локализация языка. В десктопной версии язык для проверки выставляется  автоматически, в то время как в онлайне приходится самому выбирать язык для проверки орфографии отдельных слов и абзацев.
    • Возможность перехода Online-Offline-Online при отключении и последующем подключении интернета.

    Итак, мы были уверены, что хотим сделать десктопы. Но нам нужно было ответить на вопрос: как?

    Методология



    Вариант, от которого мы отказались: нативные приложения. Хотя мы тоже считаем, что круче нативного приложения ничего быть не может, обстоятельства непреодолимой силы вынудили нас отказаться от этой идеи по причине трудоемкости и ресурсозатратности её реализации.

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

    Вариант, который мы выбрали: использовать существующий js код редакторов ONLYOFFICE. Плюсы такого подхода очевидны - разработка не так сложна, а обновление и веб-версии, и десктопа удобны, так как код один и тот же.

    Чего мы хотели:

    1. Один код общения js/с++.

    2. Кроссплатформенный GUI.

    3. Иметь в будущем возможность перейти на схему нативной отрисовки. Сам код редактора остается javascript-овый, но при этом мы должны иметь возможность переделать отрисовку (что является основным тормозом приложения).

    Что мы выбрали:

    1. Чтобы выполнялось первое требование, нам нужен был браузерный движок под все платформы. Так как мы хорошо знакомы с V8, который, к слову, используется у нас на сервере для сборки версий файлов, то изначально собирались брать Chromium в том или ином виде.

    2. Тут тоже долго не думали. Qt очень распространен и удобен. Плюс опять же был опыт работы с этой библиотекой.

    3. Пока это только планы. Но смысл в том, чтобы  js — редактор крутился отдельно, реализуя весь функционал, а отображение, измерение текста было бы нативное. Кстати, так у нас уже работает мобильное приложение под iOS.

    Немного об отрисовке



    Так как пока нативная отрисовка только в планах, нам нужен был условный кроссплатформенный WebView. У нас было несколько идей.

    Варианты:

    1. Решения «из коробки», которыми мы могли бы воспользоваться, раз уж всё равно выбрали Qt, т.е.  либо QWebView, либо QWebEngineView.

    Конечно, если бы остановились на одном из них, главными плюсами было бы то, что вся основная работа уже сделана за нас. Казалось бы неплохо, но минусы всё же перевесили.

    QWebView уже не развивается разработчиками, он очень-очень медленный и работает в том же процессе, что и приложение. Для нас это было критичным, ведь дизайнеры хотели «вкладочный» интерфейс, который подразумевает открытие и работу сразу в нескольких документах. Таким образом, случись проблема в одном документе, это привело бы к проблемам во всех вкладках.

    QWebEngineView — достаточно новый контрол, активно развивается и основан как раз на Chromium'e. Он работает в своем процессе и гораздо быстрее, чем  QWebView. Но и он не подошел. Во-первых,  из-за невозможности нормальной работы с нативным кодом в процессе, в котором работает  js код. Такое общение организовывается через вебсокеты, что неудобно. Во-вторых, на 4K мониторах почему-то начинала тормозить отрисовка.

    2. Чистый Chromium. Плюсы — быстрота и полная функциональность. Недавно вышедшая Visual Studio Code от Microsoft, реализованная именно так, заставила серьезно обратить внимание на этот способ.

    3. Chromium Embedded Framework. Это удобная обертка Chromium, c регулярно выкладываемими собранными версиями (cefbuilds.com). Плюс — гораздо проще, чем второй пункт. Минус — теряем часть функционала (обернуто и выдано в виде API много, но не все).

    Стандартные подходы мы отвергли сразу, а вот варианты 2 и 3 нам подошли. Из них мы выбрали более простое решение, то есть Chromium Embedded Framework. В итоге на основе cef реализовали CefWebView, полностью удовлетворяющий нашим запросам.

    Схема работы приложения

    Получившееся приложение работает следующим образом:



    То есть: при создании контекста V8 встраиваем свой объект, тем самым получая доступ к нативному коду из js. Далее, если нужно передать данные в другой процесс (например, в ui), пользуемся встроенным в cef механизмом межпроцессного взаимодействия путем пересылки сообщений. Аналогично посылаем сообщения из других процессов в js процесс.

    XCode для MacOS



    И все же не все в итоге реализовали так, как планировали. Например, приложение под MacOS делали не на Qt, а используя XCode.

    Дело в том, что мы используем QTabWidget для табов с редакторами, а под MacOS он довольно сильно тормозит. Речь по сути идет о простом перетаскивании табов, но, чтобы всё работало нормально, нужно было с нуля реализовать этот  контрол. Мы этим заниматься не захотели. Все-таки у нас немного нативного интерфейса, да и гораздо удобнее было разрабатывать под MacOS, используя XCode.

    Итоги



    Мы получили то, что задумывали. Приложение работает под всеми системами и делает это достойно. Оно удобно и подойдет тем, кто хочет работать оффлайн, и в то же время предполагает возможность подключения порталов, что позволит пользоваться инструментами совместного редактирования  и работать над документами совместно с другими членами команды.

    Для нас это новое интересное поле деятельности и больше возможностей заниматься любимым делом (постоянно что-то улучшать). Дальнейшие планы? Их много. В первую очередь нужно поправить баги самого редактора (JS код), дополнить необходимую функциональность (сноски, оглавление, сводные таблицы, анимация, 3D эффекты). А дальше — переходить на нативную отрисовку.

    P.S. Скачать приложение можно с нашего официального сайта. А еще (чуть не забыли!) — десктопные редакторы ONLYOFFICE бесплатны для персонального использования. Пользователи облачного решения ONLYOFFICE, оплатившие подписку на 1 или 3 года, могут получить десктопные приложения бесплатно. Для пользователей серверной версии ONLYOFFICE Enterprise Edition — 25 лицензий на десктопные приложения уже включены в стоимость подписки.
    ONLYOFFICE
    0.00
    Company
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 44

      0
      В качестве достоинств настольной версии вы указали:
      Возможность перехода Online-Offline-Online при отключении и последующем подключении интернета.
      Вроде бы то-же самое умеет делать и Google Docs без всяких десктопных версий.
        +1
        Да, но работает только в хроме, даже при отключении расширений для офлайн работы.
        0
        При работе с odt искаверкал документ, при открытии непонятно по какому критерию покрасил текст в красный в некоторых столбцах, при сохранении сжал строки почти до 0 высоты.
          0
          Если можно, то будем признательны за файл.
            0
            К сожалению открыл одну из рабочих таблиц на пробу, поэтому данный файл передать не смогу, но попробую по аналогии добиться в другом, если получится пришлю.
              0
              Заранее спасибо
          0
          Во избежание коментов в стиле «QT это QuickTime», замените QT->Qt :)
          Спасибо за статью!
            0
            готово
          • UFO just landed and posted this here
              0
              Metro style? Пока нет. А так — на десятке работает.
              0
              У вас в Open Source версии по прежнему нет доступа к онлайн редакторам?
              Пол года назад искал вариант отказаться от ГуглДОкс в пользу решения поднятого на своем сервере… Очень понравился ваш продукт. Но оказалось что Open Source вариант не умеет онлайн-редактирования… Это не изменилось?
                0
                Вы про совместное редактирование? Да, она в опенсорсе теперь есть. Но, давно не обновляли опенсорс версию. Так что там не последняя версия. Планируем обновить.
                  0
                  Скорее автор комментария имел в виду «вообще редактирование», у вас на странице www.onlyoffice.com/ru/enterprise-edition.aspx написано: «Только просмотрщики документов». Мне вот тоже интересно, будет ли возможность редактирования документов в бесплатной версии?
                    0
                    Enterprise Edition и Open Source — это разные версии ONLYOFFICE. В вашей ссылке речь идет о бесплатной версии Enterprise Edition без редакторов. Пока мы не планируем их туда добавлять.
                    В Open Source версии есть редактирование документов. Просто версия редакторов чуть постарее. Посмотрите тут.
                      0
                      Вот честно, не могу разобраться, из информации на сайте ясно только что есть 3 версии (по той ссылке я то я привел выше, причем третья еще не доступна). По вашей ссылке вообще просто набор "фич" и про разные версии ни слова. Может вам бы как-то структурировать эту информацию на сайте? Хотя дело ваше конечно.
                      Опять же непонятно что за версии на странице https://sourceforge.net/projects/teamlab/files/?source=navbar. "CommunityServer" это тот бесплатный с www.onlyoffice.com/ru/enterprise-edition.aspx — без возможности редактирования (но с дополнительными "свистелками"), а "DocumentServer" с возможностью редактирования (но только сами аналоги "Word", "Excel", "PowerPoint", без дополнительных "свистелок")?
                        0
                        И что вы подразумеваете под "Open Source"? На sourceforge.net у вас и "CommunityServer" и "DocumentServer" с исходниками.
                          0
                          Спасибо за вопрос.
                          Да, у нас два сайта — для коммерческой версии и Open Source.
                          Первая ссылка (http://www.onlyoffice.com/ru/enterprise-edition.aspx) введет на сайт с нашими коммерческими продуктами. Фактически это коммерческие сборки с дополнительными функциями для упрощения процесса управления веб-офисом. У ONLYOFFICE Enterprise Edition (коммерческой серверной версии) есть бесплатный вариант. Он называется Community. Там нет редакторов, только просмотрщики.
                          Вот эта ссылка — onlyoffice.org — ведет на страничку наших продуктов с открытым исходным кодом. Наше решение довольно сложное, поэтому оно разделно на несколько частей — Document Server (только редакторы документов), Community Server (управление проектами, CRM и пр), Mail Server. Собрав все три части, вы получите полноценную серверную версию.
                          Eсли нужны только редакторы, чтобы прикрутить к своей системе документооборота, берите Document Server, если нужна и сама система с документооборотом и со всем функционалом, берите всё и собирайте (для сравнения — в коммерческой версии всё собрано и готово к использованию).
                          Еще раз на всякий случай подчеркну, что в Document Server'e версия редакторов постарее, чем в платной версии Enterprise Edition (не в Community! в платных вариантах Standart и Portal+).
                          Возможно, путаницу внесло название Community в двух случаях. Но они действительно похожи отсюда и похожее название — Community и Community Server.
                            0
                            Спасибо за ответ (серьезно, без иронии).
                            Вот видите сколько времени вам понадобилось чтобы объяснить человеку со стороны какие версии у вашего ПО вообще есть. Дам бесплатный, а от того бесполезный, совет — структурируйте вы все таки эту информацию на своих сайтах, как есть сейчас — без ваших пояснений было непонятно, плюс совсем не интуитивное разделение на сайты onlyoffice.com и onlyoffice.org. То что это 2 разных сайта я вообще только сейчас заметил, т.к. на разницу в доменах первого уровня внимания не обратил совершенно.
                            UPD: причем инструкция по установке вашего продукта с открытым исходным кодом, которая начинается на onlyoffice.org — заканчивается страницами на сайте onlyoffice.com (хотя вы утверждаете что на onlyoffice.com находятся Enterprise решения которые устанавливаются совершено иначе). Зачем тогда на сайте Enterprise решения инструкция по установке Open Source?
                              0
                              Конечно же, нет предела совершенству, когда структурируешь информацию. Поэтому за совет спасибо: )
                              Что касается деления сайтов на .com и .org, то это не редкость. В качестве примера — ownCloud
                                0
                                инструкция по установке вашего продукта с открытым исходным кодом, которая начинается на onlyoffice.org — заканчивается страницами на сайте onlyoffice.com (хотя вы утверждаете что на onlyoffice.com находятся Enterprise решения которые устанавливаются совершено иначе). Зачем тогда на сайте Enterprise решения инструкция по установке Open Source?

                                Ответ — общий Help Center, так как нет смысла дублировать одну и ту же информацию. Там не только инструкции по установке, но и работа с самой системой, которая мало чем отличается.
                        0
                        Хотелось бы установить онлайн опенсорс версию, но без live-редактирования смысла нет никакого.
                        Уточните пожалуйста, когда произойдет обновление до последней версии?
                          0
                          Пока в планах нет. В open source версии есть наше совместное редактирование — не как в Google Docs, а с зажатием абзаца.
                          Лично мне оно нравится больше, чем "быстрое", когда видишь, всё, что печатает коллега. Позволяет редактировать фрагменты одного документа и избегать конфликта интересов: )
                          И просто из любопыства — а почему вам нужно именно быстрое?
                            0
                            Большинство коллег не умеет пользоваться кнопкой «сохранить». Они будут фигачить весь день, надолго блокируя содержимое. А потом наивно спрашивать «Как? Ты еще не видел мои изменения?». «Так ты сохрани черт тебя побери!».
                            И вот придется названивать друг другу, «ну что, готово?». «Да, но я вышел пообедать, забыл сохранить, давай через полтора часа». «Чтоб ты подавился!».
                            Вот вам примерная зарисовка того, как это будет работать с т.н. строгим редактированием. Этот режим в каком-то смысле действительно более правильный, вы правы, но в идеальной среде. Хорошо, когда все вокруг технически грамотные, ответственные и аккуратные. Но…
                            Что касается live-editing, то Atlassian обещает прям уже вот-вот зарелизить Confluence 6.0 с такой возможностью. Мы как раз пользуемся их продуктом, но в то же время смотрим, что происходит вокруг в мире и открыты для всего нового, поскольку есть и определенные минусы, не относящиеся к теме разговора.
                            Так вот у них режим будет намного хитрее, чем в Google Docs. Страница будет существовать в двух ипостасях – для просмотра и для редактирования. И всё безумие с бегающими курсорами и буквами будет происходить только в режиме редактирования у тех, кто редактирует. А проходящие мимо читатели будут видеть старую чистую версию до тех пор, пока последний редактирующий не нажмет «сохранить». Такой подход выглядит самым логичным на данный момент, посмотрим, что у них получится на самом деле.
                            Искал, где бы в явном виде были перечислены отличия Community версии от Enterprise, но так и не нашел. (только on-premises, SAAS не интересует как класс).
                            Вот оно, оказывается, и нашлось отличие. Было бы здорово, если бы вы все же написали это где-то. Все ведь понимают, что фирме надо на что-то существовать и платная версия обязана для этого иметь определенную фору в развитии. Так все делают и в этом нет ничего плохого. Просто скажите вслух, чтобы развеять недопонимание.
                              0
                              Проблема понятна: ) У нас на этот случай есть такая штука как Autosave. Главное — включить её в настройках и раз в 10 минут документы будет сохраняться со всеми изменениями, даже если автор, "зажавший" абзац ушел курить или улетел добровольцем на Марс.
                              (это я продолжаю эмоционировать как фанат "строгого" редактирования).
                              Про Atlassian — интересно. Надо будет посмотреть.
                      0
                      Ряд вопросов:
                      1. Лицензирование использования в образовании новой версии (10 машин)
                      2. Если будем делать обучающие материалы — вам высылать и куда?
                      3. Когда будет Линукс версия?

                      Все очень нравится. Планирую стать фанатом.
                        0
                        1) Напишите сюда — sales@onlyoffice.com, поскольку у нас есть специальные условия лицензирования для школ и вузов.
                        2) Конечно будем признательны за материалы, если пригодится помощь с нашей стороны — опять же будем рады, дайте о себе знать напрямую.
                        3) Версия под линукс будет вот прямо очень скоро. Она готова, дотестируем на всех версиях — и выложим..
                          0
                          положили линукс версию (Debian-based)
                          https://www.onlyoffice.com/download-desktop.aspx
                          0
                          Недостаточно развита работа с полями, нумерация как здесь habrahabr.ru/post/187398 неверно отображается, как вставить свое поле вообще не нашел.
                          Поддержка docx лучше чем у LibreOffice.
                          Панели навигации сбоку нет?
                            0
                            С нумерацией посмотрим, должно все работать хорошо. По полям — их добавить нельзя.
                            Приоритет по функционалу в редакторе документов:
                            1) сноски (скоро будут)
                            2) содержание — появится и панель навигации сразу (в каком виде — идет обсуждение)
                            3) поля.
                            +1
                            Выпускать Open Source версию десктоп клиента не планируете? Я понимаю, что движок там тот же, но тем не менее.
                              0
                              Пока — нет. Позже — может быть.
                              0
                              забыли еще слово на букву З — или оно тоже в группе O?
                                0
                                Помню много слов на букву З, но какое из них вы имеете в виду?
                                  +1
                                  Вы вообще о чём?
                                    0
                                    Приношу свои извинения, я промахнулся тредом и понадеялся остаться незамеченным…
                                    Этот коментарий к другой статье :)
                                      0
                                      Теперь даже настигло ощущение какого-то разочарования от неразгаданной тайны.
                                  0
                                  Очень огорчают вот такие надписи:
                                  Платформы: Дистрибутив Linux на базе Debian (64-разрядные)
                                  У меня на компе проц тоже 64-разрядный, но не х86-совместимый
                                    0
                                    Будет ли расширен список дистрибутивов для Линукс? Debian 32-разрядный, например, Fedora ?
                                      0
                                      для всех популярных 64-разрядных систем приложение выйдет очень скоро. Для 32-битных тоже думаю соберем. Чуть позже.
                                        0
                                        Отлично. Спасибо.
                                      0
                                      В начале февраля прочитав Вашу статью на хабре я решил попробовать доступный, на тот момент, бесплатным, до 3х пользователей, трехгодовой ключ для Enterprise Edition, который был отправлен мне на почту 03.02.16. Однако в какой-то момент система перестала открывать редакторы документов, в свежеустановленной версии, что мною было принято решение переустановить виртуалку, Однако более новый образ отказался принять ключ, а саппорт ответил, что "ONLYOFFICE, начиная с 8.7, работают только с новой лицензией". Вопрос, могу ли я где скачать более старую версию, для того что бы продолжать пользоваться валидным ключом?
                                      Спасибо
                                        0
                                        Вам всё правильно ответили. К сожалению, сейчас доступна только версия Enterprise 8.7. Для удобства сейчас предоставляется бесплатный пробный период на 30 дней.
                                        Если рассматриваете только бесплатные варианты, то советуем Open Source (http://helpcenter.onlyoffice.com/server/docker/community/docker-installation.aspx#IntegratedInstallation).
                                        Ну и напоминаю, что десктопы бесплатны для персонального использования; )
                                        0
                                        не успела нарадоваться этой новости, как приложение отказалось работать. установилось, запросило цель использования, активировалось (со второго раза), показало стартовую страницу и умерло, и так два раза. что я делаю не так?
                                          0
                                          Какая система? Если можно — то видео с повторением в личку. Будем очень признательны. Заранее спасибо.

                                        Only users with full accounts can post comments. Log in, please.