0Pricing
React Academy · Урок

Архитектура островов: выборочная гидратация

Узнайте, как острова изолируют интерактивные компоненты: только они загружают JavaScript, а остальное остаётся статическим HTML

«Архитектура островов: выборочная гидратация» — бесплатный урок React Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Концепция островов

Архитектура островов, предложенная Jason Miller в 2020 году, рассматривает веб-страницу как преимущественно статический HTML с изолированными «островами» интерактивности, встроенными в него. Статический океан HTML отправляется в браузер без изменений. Только интерактивные острова загружают и выполняют JavaScript, поэтому объём JavaScript-кода пропорционален фактической интерактивности.

Как работают острова

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

Разница в объёме JavaScript-кода

На странице записи блога с архитектурой островов объём JavaScript-кода может составлять 5 КБ для единственного острова с кнопкой «Нравится». Та же страница, созданная как React SPA, может отправлять более 200 КБ JavaScript-кода для гидратации всей страницы. При использовании островов объём кода пропорционален интерактивности, а не размеру страницы.

Острова на основе нескольких фреймворков

Astro — ведущий фреймворк для архитектуры островов — поддерживает острова, созданные с помощью разных фреймворков на одной странице. Рядом могут находиться остров React, остров Vue и остров на чистом JavaScript. Каждый остров собирается отдельно, поэтому пользователи загружают только код фреймворков, используемых видимыми островами.

client:load — Немедленная гидратация

Директива client:load выполняет гидратацию острова сразу при загрузке страницы. Используйте её для островов, которые сразу видимы и интерактивны, например для меню навигации или основной секции с полем поиска. Это стратегия гидратации с наивысшим приоритетом.

client:idle — Отложенная гидратация

Директива client:idle ждёт, пока основной поток браузера освободится после загрузки критически важного содержимого, и только затем выполняет гидратацию острова. Это идеально подходит для элементов ниже первого экрана или второстепенных взаимодействий, которые не нужны сразу, например для панели публикации в социальных сетях.

client:visible — Отложенная загрузка при появлении

Директива client:visible использует наблюдатель пересечений, чтобы выполнить гидратацию острова только после его появления в области просмотра. Это идеально подходит для островов, расположенных глубоко на странице, например для раздела комментариев или карусели похожих товаров, до которых большинство пользователей может никогда не дойти. JavaScript не загружается до тех пор, пока он не понадобится.

client:only — Пропуск SSR

Директива client:only полностью пропускает отображение на стороне сервера и формирует остров только в браузере. Это необходимо для компонентов, использующих доступные только в браузере API (window, document), или зависящих от состояния на стороне клиента в момент монтирования. Компромисс заключается в отсутствии HTML, сформированного сервером, для этого острова.

Решение проблемы гидратации

Архитектура островов решает проблему полной гидратации, гарантируя, что JavaScript загружается и выполняется только для действительно интерактивных компонентов. На странице записи блога с кнопкой «Нравится» гидратацию проходит только остров этой кнопки — текст статьи из 1200 слов, заголовок и нижний колонтитул не вызывают выполнения JavaScript на клиенте.

Изоляция состояния между островами

У каждого острова есть собственное изолированное состояние. Острова не могут напрямую совместно использовать состояние React, поскольку являются отдельными деревьями React. Это сделано намеренно: если двум компонентам нужно общее состояние, их следует объединить в один остров. Для связи между островами используются параметры URL, события DOM или лёгкие библиотеки управления состоянием.

Результаты на практике

Сайты, перенесённые с React SPA на архитектуру островов, например сайт документации Astro, сообщают о значительных улучшениях: объём JavaScript-кода уменьшается на 70–90%, TTI на мобильных устройствах улучшается на 2–4 секунды, а показатели производительности Lighthouse растут с 60 до 90 и выше. Наиболее заметны результаты на страницах с большим объёмом содержимого.

Стратегии гидратации островов

Какая директива гидратации Astro гидратирует компонент только при прокрутке до его появления в области просмотра?

Итоги урока

Архитектура островов оставляет большую часть страницы статическим HTML и гидратирует только отдельные интерактивные компоненты. Astro предоставляет директивы гидратации: client:load (немедленно), client:idle (после перехода в режим простоя), client:visible (при прокрутке) и client:only (рендеринг только на клиенте). Каждый остров гидратируется независимо, поэтому объем JavaScript зависит от интерактивности, а не от размера страницы.

Часто задаваемые вопросы

Урок «Архитектура островов: выборочная гидратация» бесплатный?

Да — полный текст урока «Архитектура островов: выборочная гидратация» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Архитектура островов: выборочная гидратация»?

Узнайте, как острова изолируют интерактивные компоненты: только они загружают JavaScript, а остальное остаётся статическим HTML Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Архитектура островов: выборочная гидратация»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Проблема полной гидратации
  2. Архитектура островов: выборочная гидратация
  3. Настройка Astro и островов React
  4. Измерение производительности: Lighthouse и основные веб-показатели
← Назад к React Academy