Strumieniowanie SSR z brzegu sieci
Prześlą Państwo strumieniowo wynik HTML Reacta za pomocą ReadableStream, aby przeglądarka mogła natychmiast wyświetlić istotną treść.
Strumieniowanie SSR z brzegu sieci to bezpłatna lekcja React Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.
Zalety strumieniowania
Gdy serwer strumieniuje kod HTML, przeglądarka otrzymuje i renderuje treść we fragmentach, zamiast czekać na cały dokument. Dzięki temu użytkownicy mogą zobaczyć i używać widocznych części strony — nagłówka, nawigacji i sekcji hero — podczas gdy wolniejsze sekcje zależne od danych wciąż się ładują.
renderToReadableStream z bootstrapScripts
Przekazanie bootstrapScripts do renderToReadableStream informuje Reacta, gdzie znajduje się pakiet JavaScriptu po stronie klienta. React wstrzykuje znacznik script na końcu strumienia, aby przeglądarka załadowała pakiet i wywołała hydrateRoot, nadając stronie interaktywność w miarę strumieniowego przesyłania kolejnych sekcji.
Granice Suspense w drzewie komponentów
Strumieniowanie Reacta opiera się na granicach Suspense, które dzielą drzewo komponentów na sekcje możliwe do niezależnego strumieniowania. Komponenty znajdujące się wewnątrz granicy Suspense i oczekujące na dane (za pośrednictwem rzuconego obiektu Promise) są najpierw strumieniowane jako zastępniki, a następnie po rozwiązaniu strumieniowana jest ich właściwa treść.
onShellReady: kiedy rozpocząć strumieniowanie
Funkcja callback onShellReady jest wywoływana, gdy powłoka HTML bez zawieszonych elementów — wszystko poza granicami Suspense — jest gotowa do strumieniowania. To właściwy moment na ustawienie kodu statusu HTTP i nagłówków odpowiedzi, a następnie wywołanie pipe(res) lub rozpoczęcie odczytu z ReadableStream.
Dlaczego kody statusu trzeba ustawić wcześniej
Kody statusu HTTP i nagłówki muszą zostać wysłane przed rozpoczęciem przesyłania treści odpowiedzi. Ponieważ strumieniowanie rozpoczyna się w onShellReady, wszelkie czynności związane z obsługą błędów, takie jak ustawienie statusu 500 lub przekierowanie, muszą nastąpić przed rozpoczęciem przesyłania powłoki — po rozpoczęciu strumieniowania kod statusu jest już zablokowany.
Obsługa błędów: onShellError
onShellError jest wywoływane, gdy przed przygotowaniem powłoki wystąpi błąd krytyczny — na przykład błąd w komponencie najwyższego poziomu znajdującym się poza dowolną granicą Suspense. W takim przypadku powłoka nigdy nie jest strumieniowana i należy odpowiedzieć statyczną stroną błędu lub przekierować użytkownika do trasy błędu.
Obsługa błędów: onError
onError jest wywoływane w przypadku możliwych do odzyskania błędów wewnątrz granic Suspense. React nadal może strumieniować pozostałą część strony, a granica, w której wystąpił błąd, renderuje awaryjny interfejs użytkownika. Należy używać onError do rejestrowania błędów: przechwycić błąd w platformie obserwowalności bez przerywania strumienia.
Progresywne usprawnianie i limity czasu
Jeśli dane granicy Suspense są pobierane zbyt długo, należy mimo to przesłać szkielet i pozwolić, aby granica została zhydratowana po stronie klienta. Należy zaimplementować limit czasu: po 5 sekundach wywołać abort() dla strumienia, jeśli granica nie zostanie rozwiązana, a klient sam pobierze dane za pośrednictwem useEffect.
Mechanizm strumieniowania w Cloudflare Workers
Środowisko uruchomieniowe Workers przekazuje ReadableStream bezpośrednio jako treść Response. Infrastruktura Cloudflare przekazuje każdy fragment do przeglądarki użytkownika w miarę generowania go przez React, bez buforowania całego dokumentu. Oznacza to, że pierwsze bajty HTML opuszczają brzegowy PoP w ciągu milisekund od nadejścia żądania.
abort(): kontrolowanie długich strumieni
renderToReadableStream zwraca funkcję kontrolującą przerwanie. Jeśli żądanie zostanie anulowane (użytkownik przejdzie na inną stronę), wywołanie abort() zatrzymuje React przed dalszym renderowaniem i przetwarzaniem danych. Zapobiega to marnowaniu zasobów obliczeniowych na osierocone żądania i ogranicza zużycie CPU Workera.
Profil opóźnień od końca do końca
W przypadku strumieniowania na brzegu pełny łańcuch opóźnień wygląda następująco: 5 ms (żądanie do najbliższego PoP) + 2 ms (zimny start Workera) + 8 ms (renderowanie szkieletu) = 15 ms do pierwszego bajtu. Przeglądarka użytkownika renderuje element LCP ze szkieletu, podczas gdy reszta strony nadal jest przesyłana strumieniowo w tle.
Moment wywołania onShellReady
Kiedy dokładnie podczas strumieniowego SSR jest wywoływany callback onShellReady?
Podsumowanie lekcji
Strumieniowe SSR z brzegu dostarcza HTML we fragmentach, poprawiając FCP i LCP dzięki natychmiastowemu wysłaniu szkieletu. Granice Suspense dzielą drzewo na niezależnie przesyłane strumieniowo sekcje. onShellReady to sygnał do rozpoczęcia przekazywania strumienia — kody statusu należy ustawić przed jego wywołaniem. onShellError obsługuje błędy krytyczne, onError — błędy możliwe do odzyskania, a abort() zapobiega marnowaniu pracy po anulowaniu żądania.
Często zadawane pytania
Czy lekcja „Strumieniowanie SSR z brzegu sieci” jest bezpłatna?
Tak — pełny tekst „Strumieniowanie SSR z brzegu sieci” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Strumieniowanie SSR z brzegu sieci”?
Prześlą Państwo strumieniowo wynik HTML Reacta za pomocą ReadableStream, aby przeglądarka mogła natychmiast wyświetlić istotną treść. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć React Academy?
Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Strumieniowanie SSR z brzegu sieci”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?
Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Czym jest renderowanie na brzegu sieci i dlaczego ma znaczenie
- React na Cloudflare Workers z Hono
- Strumieniowanie SSR z brzegu sieci
- Strategie buforowania aplikacji React na brzegu sieci