Преамбула К статье о публикации фрэймворка Pusa авторы получили полезные для дальнейшей работы над проектом отклики. Наиболее важным нам показалась беседа с создателем проекта Korolev, реализующего аналогичную парадигму но принципиально иными методами. Так как, у нас была возможность не только познакомится с исходным кодом Korolev, но и пообщаться с его создателем, считаем возможным показать принципиальное отличие концепции Pusa, именно на примере Korolev. Задача Оба проекта реализуют разработку web-приложений без необходимости написания клиентского кода JavaScript конечным разработчиком. Решение Korolev Реализация scala. При открытии страница браузер клиента скачивает базовый JavaScript-код приложения. Тот открывает WebSocket-соединение с сервером Korolev. На стороне сервера формируется DOM-структура. Клиентские события направляются через websocket на сервер. Получив очередное событие Korolev выполняет необходимую бизнес логику, вносит изменения в DOM на стороне сервера, далее выполняется построение дифференциального обновления которое направляется на клиент. Благодаря оптимизированному механизму построения дифов, эффективность обработки DOM на стороне Korolev высока. Клиентское приложение получив изменения, отражает их в DOM браузера. Пользователь получает необходимый контент. Решение Pusa Реализация PHP. При старте приложения браузер скачивает базовый JavaScript-код приложения Pusa (6кб). Приложение выполняет AJAX запросы на основе событий браузера. Каждый запрос содержит данные о событийном DOM-элементе и служебную информацию. Сервер Pusa получая очередное событие, определяет и выполняет контроллер с бизнес логикой, и возвращает набор инструкций согласно протоколу Pusa (https://gitlab.com/catlair/pusa/-/blob/main/site/pusa/src/language_ru/man/pusa_protocol.md), как результат AJAX запроса. JavaScript-клиент отрабатывает полученные инструкции, внося изменения в клиентский DOM. Пользователь получает необходимый контент. Общее в концепциях Клиентские приложения требуют JavaScript как основу работы приложения. От разработчика не требуется работа над клиентским кодом JavaScript ни в каком виде. Бизнес логика и работа с DOM выполняется на стороне сервера на имеющихся средствах разработки. Клиент получает необходимый контент. Код приложения находится в безопасном серверном окружении и не присутствует на стороне клиента. Клиентский код JavaScript минималистичен и стабилен. С разработчика снимается проблема сериализации при передаче данных. Особенности Korolev Сервер обладает отражением DOM-объекта для каждого клиентского соединения. Korolev направляет клиенту дифференциальный, хорошо оптимизированный контент. Korolev использует WebSocket, как основной высокопроизводительный метод взаимодействия. В силу архитектуры сервер Korolev имеет возможность инициировать изменение клиентского контента. Особенности Pusa Сервер не требует и не подразумевает хранение состояния клиента, те реализуется чистый REST. Pusa направляет клиенту команды в ответе AJAX через XMLHttpRequest, что значительно снижает требования к браузеру. Pusa относится к клиенту как удаленному конечному автомату без обратной связи. Технология Pusa не имеет возможности инициировать событие со стороны сервера. Инициатором событий является исключительно клиент (таймер возможен). Выводы. Технологии, основывающиеся на необходимости хранения состояния клиента потенциально ограничены ростом клиентских подключений, и как следствие предполагают централизацию аппаратных ресурсов. Возможность инициации событий со стороны сервера является необходимой опцией для внутренних решений. Три перечисленных фактора определяет рынок корпоративных решений, как наиболее привлекательный для технологий, аналогичных Korolev. Качественная оптимизация Korolev явно демонстрируют стремление к минимизации накладных расходов на хранение клиентских состояний, но не устраняет их. Pusa, принципиально следуя парадигме чистого REST, нацелена на рынок открытых решений, со значительным количеством клиентских подключений. Pusa предполагает использование множества независимых инстансов, с минимальными требования, без необходимости их общего взаимодействия. Запросы одного и того же пользователя к Pusa могут обрабатываться различными инстансами в рамках одной сессии, что позволяет использовать решение под значительными нагрузками. Ссылки Korolev Pusa сравнительная схема Анонс публикации Pusa 06.12.2021 , Автор: Still Swamp https://www.opennet.ru/tips/3197_frontend_ajax_rest_websocket_javascript_pusa_korolev.shtml