0Pricing
React Academy · Урок

Прогрессивная гидратация с выборочной гидратацией

Используйте выборочную гидратацию React 18, чтобы в первую очередь гидратировать компоненты, с которыми взаимодействует пользователь

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

Что такое выборочная гидратация

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

React 18: не всё сразу при гидратации

До React 18 гидратация выполнялась по принципу «всё или ничего»: React должен был загрузить весь JavaScript и гидратировать всё дерево, прежде чем какая-либо часть страницы становилась интерактивной. React 18 снимает это ограничение: части дерева гидратируются независимо по мере доступности их кода и данных.

Взаимодействие пользователя повышает приоритет гидратации

Если пользователь щёлкает по границе Suspense или взаимодействует с ней до завершения гидратации, React немедленно отдаёт приоритет гидратации этого поддерева перед любой другой ожидающей работой. Это означает, что элемент, которым пользователь пытается воспользоваться, станет интерактивным первым, даже если он находится не в начале документа.

React.lazy и Suspense для разделения кода

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

Влияние на взаимодействие с пользователем

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

Измерение влияния

Выборочная гидратация уменьшает суммарное время блокировки (TBT) — ключевую метрику производительности гидратации. На вкладке «Производительность» в Chrome DevTools длительные задачи, то есть задачи продолжительностью более 50 мс, выделяются красным цветом. До выборочной гидратации можно увидеть одну длительную задачу продолжительностью 300 мс для полной гидратации; после неё — несколько небольших задач, распределённых во времени.

Как избежать неторопливого импорта на верхнем уровне

Антишаблон, подрывающий выборочную гидратацию, — импорт всех компонентов в верхней части приложения: import Footer from './Footer'. Из-за этого браузер вынужден загрузить, разобрать и выполнить код Footer до начала любой гидратации. Замените импорты компонентов нижней части страницы на верхнем уровне на React.lazy и динамический импорт.

Динамический импорт содержимого ниже первого экрана

Используйте const Footer = React.lazy(() => import('./Footer')) для компонентов, расположенных ниже исходной области просмотра. Оберните их в Suspense с простым резервным интерфейсом. Браузер снизит приоритет загрузки пакета Footer до завершения гидратации содержимого верхней части экрана, что естественным образом улучшит TBT.

Взаимодействие потоковой передачи и выборочной гидратации

Потоковая передача и выборочная гидратация дополняют друг друга: потоковая передача отправляет фрагменты HTML, улучшая FCP и LCP, а выборочная гидратация обрабатывает фрагменты JavaScript, улучшая TTI и TBT. Вместе они решают обе задачи производительности: «быстро показать содержимое» и «быстро сделать его интерактивным».

Выборочная гидратация и серверные компоненты React

Серверные компоненты React развивают эту идею: серверные компоненты вообще не создают JavaScript для клиента. Гидратировать нужно только клиентские компоненты, помеченные как «use client». Это уменьшает общий объём JavaScript, который требуется гидратировать, и делает выборочную гидратацию ещё эффективнее.

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

Практический шаблон: используйте renderToPipeableStream для потоковой передачи HTML, оберните страницу в корневой вызов hydrateRoot вместо createRoot, чтобы включить режим гидратации, используйте React.lazy для всех секций ниже первого экрана и оберните каждую секцию в границу Suspense. Остальное React выполнит автоматически.

Взаимодействие пользователя и выборочная гидратация

Как взаимодействие пользователя влияет на приоритет выборочной гидратации в React 18?

Итоги урока

Выборочная гидратация позволяет React постепенно гидратировать поддеревья компонентов по мере поступления их JavaScript, не дожидаясь загрузки полного пакета. Взаимодействие пользователя повышает приоритет гидратации выбранного поддерева. React.lazy и динамический импорт содержимого ниже первого экрана в сочетании с границами Suspense обеспечивают такой постепенный подход. Выборочная гидратация и потоковая SSR — взаимодополняющие методы, которые вместе улучшают как доставку содержимого, так и производительность взаимодействия.

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

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

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

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

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

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

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

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

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

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

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

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

  1. Потоковая передача в React 18: как работает renderToPipeableStream
  2. Границы Suspense и приоритет потоковой передачи
  3. Прогрессивная гидратация с выборочной гидратацией
  4. Измерение влияния потоковой передачи: FCP, TTI и LCP
← Назад к React Academy