0Pricing
React Academy · Урок

Потоковая SSR с периферии

Передавайте HTML-вывод React через ReadableStream, чтобы браузер мог немедленно отобразить содержимое, важное для пользователя

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

Преимущество потоковой передачи

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

renderToReadableStream с bootstrapScripts

Передача bootstrapScripts в renderToReadableStream сообщает React, где находится клиентский пакет JS. React добавляет тег script в конце потока, чтобы браузер загрузил пакет и вызвал hydrateRoot, делая страницу интерактивной по мере потоковой передачи каждого раздела.

Границы Suspense в дереве

Потоковая передача в React опирается на границы Suspense, разделяющие дерево компонентов на независимо передаваемые потоком разделы. Компоненты внутри границы Suspense, ожидающие данные (через выброшенный Promise), сначала передаются как заполнители, а затем разрешаются и позже передают своё настоящее содержимое.

onShellReady: когда начинать потоковую передачу

Обратный вызов onShellReady срабатывает, когда HTML-оболочка без приостановленных частей — всё, что находится за пределами границ Suspense, — готова к потоковой передаче. Это подходящий момент, чтобы установить код состояния HTTP и заголовки ответа, а затем вызвать pipe(res) или начать чтение из ReadableStream.

Почему коды состояния необходимо устанавливать заранее

Коды состояния HTTP и заголовки необходимо отправить до начала передачи тела ответа. Поскольку потоковая передача начинается с onShellReady, вся логика обработки ошибок — установка состояния 500 или перенаправление — должна выполняться до начала передачи оболочки: после начала потоковой передачи код состояния уже нельзя изменить.

Обработка ошибок: onShellError

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

Обработка ошибок: onError

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

Прогрессивное улучшение и время ожидания

Если данные границы Suspense обрабатываются слишком долго, всё равно передайте оболочку в поток и позвольте границе гидратироваться на клиенте. Реализуйте тайм-аут: через 5 секунд вызовите abort() для потока, если граница ещё не разрешилась, и тогда клиент сам получит данные через useEffect.

Механика потоковой передачи в Cloudflare Workers

Среда выполнения Workers напрямую передаёт ReadableStream как тело ответа. Инфраструктура Cloudflare пересылает каждый фрагмент в браузер пользователя по мере того, как React его формирует, не буферизуя весь документ. Это означает, что первые байты HTML покидают пограничный узел в течение нескольких миллисекунд после получения запроса.

Прерывание: управление длинными потоками

renderToReadableStream возвращает функцию контроллера прерывания. Если запрос отменён (пользователь перешёл на другую страницу), вызов abort() останавливает дальнейшую отрисовку React и обработку данных. Это предотвращает напрасные вычисления для оставшихся без владельца запросов и ограничивает использование CPU рабочим процессом Worker.

Профиль сквозной задержки

При потоковой передаче с границы полная цепочка задержек выглядит так: 5 мс (от запроса до ближайшего пограничного узла) + 2 мс (холодный запуск Worker) + 8 мс (отрисовка оболочки) = 15 мс до получения первого байта. Браузер пользователя отрисовывает элемент LCP из оболочки, пока остальная часть страницы продолжает поступать в фоновом режиме.

Время вызова onShellReady

Когда именно во время потоковой передачи SSR вызывается обратный вызов onShellReady?

Итоги урока

Потоковая передача SSR с границы доставляет HTML фрагментами, улучшая FCP и LCP за счёт немедленной отправки оболочки. Границы Suspense разделяют дерево на независимые секции, которые можно передавать в потоке. onShellReady — это сигнал для начала передачи данных; коды состояния нужно задать до его вызова. onShellError обрабатывает критические сбои, onError — устранимые, а abort() предотвращает напрасную работу для отменённых запросов.

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

Урок «Потоковая SSR с периферии» бесплатный?

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

Чему я научусь в уроке «Потоковая SSR с периферии»?

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

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

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

Сколько времени занимает урок «Потоковая SSR с периферии»?

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

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

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

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

  1. Что такое периферийный рендеринг и почему он важен
  2. React на Cloudflare Workers с Hono
  3. Потоковая SSR с периферии
  4. Стратегии периферийного кэширования для приложений React
← Назад к React Academy