Назад

Декларативный точечный апдейт страниц: прощай, тяжелый JS для стриминга? ⚡️

Declarative Partial Updates: нелинейный HTML-стриминг, маркеры, template и новые API для обновления страниц без лишнего JS.

Декларативный точечный апдейт страниц: прощай, тяжелый JS для стриминга? ⚡️

На майском Google I/O 2026 команда Chrome презентовала крутую штуку, которая прямо сейчас закладывается в стандарты HTML — Declarative Partial Updates. Фича уже доступна для тестов в Chrome 148.

Суть проблемы: классический HTML-стриминг всегда был строго линейным. Браузер парсит документ сверху вниз по мере загрузки байтов. Если у вас на странице есть «тяжелый» блок (например, блок рекомендаций, требующий долгого запроса к БД), серверу приходилось либо придерживать весь стрим, либо разработчики городили костыли на JS, догружая куски через AJAX/Fetch и руками вставляя их в DOM.

Новое API решает это на уровне самого браузера с помощью Out-of-order HTML streaming (нелинейного стриминга).

Как это работает?
В то место, где контент появится позже, вставляется специальная процессинговая инструкция-маркер:

<div><? marker name="deferred-box" ?></div>

Браузер спокойно рендерит всю остальную страницу, отдавая пользователю быстрый First Paint. Когда сервер наконец-то посчитал тяжелые данные, он докидывает в этот же поток обычный тег <template> с указанием таргета:

<template for="deferred-box">
  <div class="heavy-widget">Тут лежат данные из БД!</div>
</template>

Браузер на лету подхватывает этот шаблон и декларативно, вообще без участия JavaScript, «впиливает» его контент ровно на место маркера deferred-box.

Что еще завезли в этот пак?
Помимо стриминга из коробки, обновили и JS-методы для вставки HTML. Вместо старого и небезопасного innerHTML появился расширенный набор статических и стриминговых API: setHTML(), setHTMLUnsafe(), а также совершенно новые методы вроде streamHTMLUnsafe() и appendHTML(). Они позволяют реализовать SPA-подобные точечные обновления страниц (в стиле HTMX), скармливая браузеру куски HTML-потоков прямо через встроенные веб-трансляции (Streams API).

Зачем это нужно?
1. Архитектура Islands (Острова): Привет Astro и аналогам. Теперь статические «острова» и динамические блоки можно собирать и обновлять силами самого HTML-парсера.
2. Отказ от лишнего JS: Больше не нужно тащить клиентские скрипты только ради того, чтобы поймать чанк с сервера и сделать appendChild.
3. Перформанс: Меньше нагрузка на процессор, так как парсинг и вставка происходят на самом низком уровне движка браузера.

Пока инициатива обкатывается в Chromium, на npm уже вовсю пилят официальные полифиллы (template-for-polyfill). Кажется, через пару лет концепция Server-Driven UI выйдет на абсолютно новый уровень.

Как вам идея внедрения <?таких_конструкций?> обратно в современный HTML? Не пахнет ли старым добрым PHP/BigPipe, но теперь на стероидах прямо в браузере? 👇

Читать пост

Скопировано