0Pricing
React Academy · Урок

Границы Suspense и приоритет потоковой передачи

Размещайте границы Suspense, чтобы управлять порядком передачи фрагментов HTML и моментом замены резервных состояний содержимым

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

Suspense как разделитель потоковой передачи

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

Оболочка: быстрое синхронное содержимое

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

Резервные интерфейсы в исходном HTML

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

Разрешение данных и замена резервных интерфейсов

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

Шаблон со встроенным скриптом

React использует шаблон с элементом template HTML: содержимое разрешённой границы Suspense передаётся в скрытый шаблон, после чего скрипт вызывает внутреннюю функцию React, чтобы переместить содержимое шаблона в нужное место DOM. Благодаря этому замена выполняется без манипуляций с DOM со стороны JS-фреймворка.

Вложенные Suspense: независимые временные шкалы

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

Стратегия размещения: что и где находится

Эффективное размещение Suspense предполагает, что медленные компоненты, зависящие от данных, находятся внутри границ Suspense, а быстрые, статические или доступные синхронно — снаружи. Панели навигации, главные секции со статическим текстом и нижние колонтитулы должны находиться снаружи. Списки товаров, панели пользователя и ленты комментариев — внутри.

Порядок потоковой передачи: не обязательно порядок в документе

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

Приоритетные подсказки и взаимодействие с пользователем

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

Как избежать чрезмерно мелких границ

Чем больше границ Suspense, тем гибче потоковая передача, но их избыток увеличивает накладные расходы из-за встроенных скриптов замены. Практическое правило: оборачивайте целые «разделы» — содержимое верхней части экрана, боковую панель или ленту ниже первого экрана, — а не отдельные компоненты. От одной до трёх границ Suspense на страницу — распространённый оптимальный вариант.

Измерение влияния потоковой передачи с помощью Chrome DevTools

На вкладке «Сеть» в Chrome DevTools включите «Сохранять журнал» и наблюдайте за потоковой передачей ответа: HTML-документ увеличивается частями. На вкладке «Производительность» отображаются маркеры FCP и LCP — сравните сборки с потоковой и без потоковой передачи, чтобы оценить улучшение. Ограничьте скорость до быстрого 3G, чтобы усилить эффект.

Резервный интерфейс Suspense в потоковом HTML

Что происходит с резервным интерфейсом границы Suspense в исходном HTML-ответе потоковой передачи?

Итоги урока

Границы Suspense разделяют дерево React на секции, которые можно передавать независимо. Оболочка, находящаяся вне Suspense, передаётся первой; для ожидающих границ сразу отображаются резервные интерфейсы; разрешённое содержимое заменяет их с помощью встроенных скриптов. У вложенных границ независимые временные шкалы. Размещайте границы на уровне секций для оптимальной детализации потоковой передачи, а порядок гидратации при взаимодействии пользователя оставьте системе приоритетов React.

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

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

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

Чему я научусь в уроке «Границы Suspense и приоритет потоковой передачи»?

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

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

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

Сколько времени занимает урок «Границы Suspense и приоритет потоковой передачи»?

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

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

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

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

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