Границы 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 — локальная установка не требуется.
Все уроки этого курса
- Потоковая передача в React 18: как работает renderToPipeableStream
- Границы Suspense и приоритет потоковой передачи
- Прогрессивная гидратация с выборочной гидратацией
- Измерение влияния потоковой передачи: FCP, TTI и LCP