Как бы вы перенесли офисный пакет, такой как LibreOffice, в облако? Я предполагаю, что вы можете начать думать о том, как вы могли бы преобразовать его в собственный JavaScript или asm.js программа, которая работала в основном в браузере. Нет, дело не в этом.
LibreOffice — это популярный офисный пакет с открытым исходным кодом-он написан на C/C++ и представляет собой большую программу. Возможно, вы могли бы подумать о реализации одного из его приложений — скажем, писателя — в JavaScript, но переносить все это-ужасающая перспектива. Даже мысль о попытке поместить код через emscripten для генерации JavaScript довольно пугает.
Подход, который приняла команда LibreOffice, заключается в том, чтобы превратить LibreOffice в сервер, который использует браузер в качестве средства вывода. Правильно, вся работа выполняется на сервере, и все, что делает браузер, — это отображает растровое изображение того, как выглядит вывод.
Это не так просто, как кажется на первый взгляд. Команда экспериментировала с GTK+Broadway, который обеспечивает виртуальную среду рабочего стола в браузере, но скорость, похоже, была самой большой проблемой, когда фрагмент изображения приходилось отправлять клиенту с каждым обновлением. Простой тест также включал использование полного LibreOffice, работающего на сервере для каждого клиента, — не особенно масштабируемого, если память не является объектом.
Отметив, что большую часть времени пользователь просто читал документ, а изменения занимали сравнительно короткое время, идея кэширования отрисованного документа показалась ему лучшим подходом. Однако что действительно заставляет его работать, так это использовать сервер плиток, позволяющий создавать рендеринг в небольших квадратах — это, конечно, то, как работают Google Maps и аналогичные средства просмотра больших изображений. Закадровые плитки кэшируются, готовые к использованию, как только пользователь прокручивает их.
Диаграмма: Майкл Микс
Клиентское программное обеспечение JavaScript должно обеспечивать некоторые «живые действия», такие как курсор, поля выбора и так далее. Он также передает нажатия клавиш и другие входные данные обратно на сервер с помощью websockets. Он также должен заметить, когда плитка была признана недействительной, и запросить обновление.
Все это взаимодействие с пользователем передается обратно в LibreOfficeKit, который является недавним модулем, разработанным для обеспечения прямого и легкого доступа к LibreOffice через интерфейс C/C++. Он был изменен для создания плиток и, как правило, кажется модулем, в котором фактически выполняется вся работа по внедрению новых версий — браузера и Android — LibreOffice.
Диаграмма: Майкл Микс
В целом общий план ясен, даже если детали все еще немного расплывчаты.