Программирование и разработка программного обеспечения

Compose HTML: изучение пути серверного рендеринга веб-интерфейсов в Kotlin

В статье JetBrains Blog рассматривается возможность добавления цели JVM в Compose HTML, чтобы обеспечить создание HTML-страниц на сервере с использованием типобезопасных компонентов Compose, сохранив Kotlin вместо традиционных шаблонов представления. Источник подчёркивает, что идея пока носит исследовательский характер и не является официальным обязательством или дорожной картой, при этом она может стать общей основой для таких фреймворков, как Kobweb, Kilua и Summon.

2026-08-14
5 мин. чтения
243 просмотров
certi.news Editorial Team
Compose HTML: изучение пути серверного рендеринга веб-интерфейсов в Kotlin

В статье, опубликованной в блоге JetBrains, рассматривается возможность использования Compose HTML для создания веб-интерфейсов, отображаемых на сервере в среде Kotlin, в то время как несколько фреймворков переносят часть обработки интерфейсов на сервер. Предлагаемая идея заключается в предоставлении повторно используемых и типобезопасных компонентов Compose вместо написания текстовых шаблонов, отделённых от кода приложения. В статье подчёркивается, что изложенное представляет собой исследование идей, а не официальное обязательство JetBrains, объявление API или дорожную карту.

Предложение начинается со сравнения с направлениями, появившимися в других экосистемах: React представил серверные компоненты, HTMX вновь привлёк внимание к модели hypermedia, а Phoenix LiveView продемонстрировал возможность отправки интерактивных обновлений с сервера без зависимости от клиентского фреймворка. В статье отмечается, что экосистема JVM располагает множеством библиотек для серверного рендеринга, однако они часто используют языки шаблонов и не предлагают компонентов, достаточно близких к концепции компонентов, знакомой разработчикам JavaScript.

Почему Compose HTML?

Compose Multiplatform предоставляет способ однократно писать бизнес-логику и пользовательские интерфейсы и совместно использовать их на Android, iOS, настольных компьютерах и в вебе. Однако текущая веб-цель Compose Multiplatform основана на непосредственном рендеринге внутри canvas, что, согласно статье, создаёт затраты, связанные с оптимизацией для поисковых систем, временем загрузки и доступностью.

Compose HTML, предшествующий Compose for Web, использует Compose Runtime для создания одностраничных приложений на Kotlin с последующей компиляцией в JavaScript посредством компилятора Kotlin/JS. В статье предлагается добавить к нему цель JVM, чтобы он мог выполнять серверный рендеринг: дерево HTML создавалось бы непосредственно в Kotlin с использованием настоящих компонентов и типов, без отдельного языка шаблонов.

Источник приводит сопоставительный пример компонента карточки, написанного в Thymeleaf и в Compose. В шаблонном подходе карточка определяется в отдельном файле, а параметры передаются как строки без проверки типов. В Compose карточка является типизированной функцией, принимающей заголовок типа String и число типа Int. Поэтому изменение имени параметра приводит к обновлению мест использования через среду разработки или к ошибке во время компиляции, а передача неправильного типа вызывает ошибку компилятора, а не неожиданность во время выполнения.

Концепция серверного рендеринга

Предлагаемая концепция требует добавления таких функций, как renderToString и renderToBytes, для однократного выполнения composition на JVM с последующим преобразованием полученного дерева в HTML-текст или байтовые данные. Согласно приведённому примеру, процесс создаёт такие компоненты, как текст и контейнерные элементы, ожидает стабилизации первоначальной композиции, затем проходит по полученному дереву и преобразует его в HTML без браузера или DOM.

У этой модели есть очевидные ограничения. Вероятно, она будет ограничиваться одной фазой рендеринга без рекомпозиции при изменении состояния или выполнения эффектов, что делает её близкой к концепции серверного рендеринга во фреймворках JavaScript. Обработчики событий в компонентах также могут быть приняты, однако на сервере они будут неактивны, поскольку связывать события браузера при создании HTML на сервере бессмысленно.

В статье рассматривается концепция полноценного приложения задач на базе Spring Boot: маршрут GET отображает страницу задач, а запросы POST добавляют новую задачу или изменяют её состояние. В этом сценарии взаимодействие будет основываться на отправке настоящих HTTP-форм и перезагрузке страницы без JavaScript на стороне клиента — подобно традиционным приложениям представления на Thymeleaf, но с написанием всего интерфейса внутри Compose.

Текущее состояние и потенциальные фреймворки

В настоящее время Compose HTML имеет только цель JS и поэтому не предоставляет серверный рендеринг. Тем не менее статья указывает на наличие активной экосистемы вокруг Compose для веба. Фреймворк Kobweb построен поверх Compose HTML и поддерживает экспорт статических сайтов и предварительный рендеринг для улучшения видимости в поисковых системах, но не предоставляет SSR. Kilua напрямую использует Compose Runtime для реализации SSR и CSR и предлагает интеграции с Ktor, Spring Boot и другими платформами, тогда как Summon поддерживает SSR и hydration.

Согласно предложению, добавление возможностей SSR в Compose HTML может предоставить Kobweb, Kilua и Summon общую основу вместо трёх отдельных направлений. Это также может дать фреймворкам Spring Boot и Ktor практическую причину для интеграции с Compose HTML на сервере. Однако такой результат не гарантирован и не объявлен: статья описывает его как потенциальное направление, требующее экспериментов и определения необходимых точек интеграции.

После первоначального рендеринга

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

При этом концепция не предполагает превращения Compose HTML в готовый полноценный фреймворк со всеми компонентами и возможностями. Ближайшая цель, как поясняет источник, — сохранить ядро небольшим, а создание интеграций с фреймворками и библиотеками экосистемы оставить сообществу, следуя подходу, похожему на React, но в рамках мультиплатформенной библиотеки. Это отличается от других частей Compose Multiplatform, которые предоставляют официальные библиотеки для Material3, управления состоянием и прочего.

Согласно статье, ведутся обсуждения с разработчиками Kobweb, Kilua и Summon для сбора их мнений, а команда Spring проявила интерес к эксперименту после добавления цели JVM в Compose HTML. Поэтому текущая ценность этого предложения заключается в определении потенциального направления развития веб-разработки на JVM, а не в предоставлении доступного продукта или подтверждённой функции. Если идея получит развитие, основной задачей станет баланс между простотой ядра, интеграцией с серверными фреймворками и требованиями к интерактивности и повторному использованию компонентов между клиентом и сервером.

Источник новости
c
Автор

certi.news Editorial Team

Что важно знать

В статье JetBrains Blog рассматривается добавление цели JVM в Compose HTML для создания HTML на сервере с использованием типобезопасных компонентов Kotlin вместо традиционных шаблонов представления. Идея всё ещё находится на экспериментальной стадии и не является официальным обязательством или объявленной функцией, но может стать общей основой для таких фреймворков, как Kobweb, Kilua и Summon.

  • Концепция предполагает запуск Compose HTML на JVM и создание HTML или байтовых данных с помощью таких функций, как renderToString и renderToBytes.
  • Компоненты Compose, написанные в виде типизированных функций, позволяют проверять типы во время разработки или компиляции, в отличие от строковых параметров в таких шаблонах, как Thymeleaf.
  • Первоначальный серверный рендеринг будет ограниченным: он не включает рекомпозицию при изменении состояния или выполнение эффектов браузера, а обработчики событий остаются неактивными на сервере.
  • Предлагаемое приложение Spring Boot может использовать GET- и POST-запросы, HTTP-формы и перезагрузку страницы без JavaScript на стороне клиента.
  • В настоящее время Compose HTML поддерживает только цель JavaScript, тогда как Kilua и Summon предоставляют некоторые возможности SSR, а Kobweb поддерживает статический экспорт и предварительный рендеринг, но не SSR.
  • В дальнейшем концепции потребуется решить вопросы hydration и синхронизации состояния, чтобы компоненты можно было совместно использовать на сервере и в браузере.

Частые вопросы

Стал ли серверный рендеринг в Compose HTML официально доступен?

Нет. В статье указано, что это исследовательская идея, не являющаяся официальным обязательством JetBrains, объявлением API или частью дорожной карты.

В чём преимущество добавления цели JVM в Compose HTML?

Это позволит выполнять рендеринг на сервере и создавать HTML-дерево непосредственно в Kotlin с использованием настоящих типобезопасных компонентов Compose, без отдельного языка шаблонов.

Будут ли взаимодействия браузера работать во время создания HTML на сервере?

Нет. Компоненты могут принимать обработчики событий, но на сервере они будут неактивны, а предполагаемый сценарий может опираться на HTTP-формы и перезагрузку страницы.

Какие фреймворки могут воспользоваться этим направлением?

В статье упоминаются Kobweb, Kilua и Summon; также говорится о возможной пользе для интеграций Spring Boot и Ktor благодаря серверным возможностям Compose HTML.

Изучить сюжет

Связанные темы и сущности

В той же категории

Вам также может понравиться

Все новости