Streamet SSR fra edge
Stream Reacts HTML-output ved hjælp af ReadableStream, så browseren straks kan vise meningsfuldt indhold.
Streamet SSR fra edge er en gratis React Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i React Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. React Academy-kurset indeholder 4 lektioner i alt.
Fordelen ved streaming
Når en server streamer HTML, modtager og gengiver browseren indhold i stykker i stedet for at vente på hele dokumentet. Det betyder, at brugere kan se og interagere med de synlige dele af siden — sidehovedet, navigationen og hero-sektionen — mens langsommere sektioner, der afhænger af data, stadig indlæses.
renderToReadableStream med bootstrapScripts
Hvis du sender bootstrapScripts til renderToReadableStream, fortæller du React, hvor klientens JS-pakke ligger. React indsætter et script-tag i slutningen af streamen, så browseren indlæser pakken og kalder hydrateRoot, hvilket gør siden interaktiv, efterhånden som hver sektion er færdig med at blive sendt som en strøm.
Suspense-grænser i træet
React's streaming er afhængig af Suspense-grænser til at opdele komponenttræet i sektioner, der kan sendes som separate strømme. Komponenter inde i en Suspense-grænse, som venter på data (via et Promise, der kastes), sendes først som pladsholdere og løses derefter, hvorefter deres rigtige indhold sendes.
onShellReady: Hvornår streaming skal begynde
onShellReady-callbacken udløses, når HTML-skallen uden Suspense — alt uden for Suspense-grænserne — er klar til at blive sendt som en strøm. Det er det rigtige tidspunkt at angive HTTP-statuskoden og svarheaderne og derefter kalde pipe(res) eller begynde at læse fra ReadableStream.
Hvorfor statuskoder skal angives først
HTTP-statuskoder og headere skal sendes, før svarlegemet begynder. Fordi streaming begynder med onShellReady, skal al fejlhåndteringslogik (angivelse af status 500, omdirigering) køre, før skallen begynder at flyde — når streaming først er begyndt, er statuskoden låst.
Fejlhåndtering: onShellError
onShellError udløses, når der opstår en fatal fejl, før skallen er klar — f.eks. en fejl i en komponent på øverste niveau uden for en Suspense-grænse. I så fald sendes skallen aldrig, og du bør svare med en statisk fejlside eller omdirigere til en fejlrute.
Fejlhåndtering: onError
onError udløses ved fejl, der kan genoprettes fra, inden for Suspense-grænser. React kan stadig sende resten af siden som en strøm; den grænse, hvor fejlen opstod, gengiver sin reservebrugerflade til fejl. Brug onError til logning: registrer fejlen på din overvågningsplatform uden at afbryde strømmen.
Progressiv forbedring og tidsudløb
Hvis dataene for en Suspense-grænse tager for lang tid, skal du streame skallen alligevel og lade grænsen blive hydreret på klienten. Implementér en tidsgrænse: Efter 5 sekunder skal du kalde abort() for streamen, hvis grænsen ikke er blevet afklaret, hvorefter klienten selv henter dataene via useEffect.
Streamingsmekanik i Cloudflare Workers
Workers-runtimeet videregiver ReadableStream direkte som Response-bodyen. Cloudflares infrastruktur videresender hver blok til brugerens browser, efterhånden som React producerer den, uden at buffere hele dokumentet. Det betyder, at de første HTML-bytes forlader edge-PoP'en inden for millisekunder efter, at anmodningen ankommer.
Afbrydelse: Styring af lange datastrømme
renderToReadableStream returnerer en funktion til afbrydelse. Hvis anmodningen annulleres (brugeren navigerer væk), stopper et kald til abort() React i at fortsætte med at gengive og behandle data. Det forhindrer spildt beregning på forladte anmodninger og holder Workerens CPU-forbrug begrænset.
Profil for ende-til-ende-latens
Med streaming ved edge ser hele latenskæden sådan ud: 5 ms (anmodning til nærmeste PoP) + 2 ms (kold opstart af Worker) + 8 ms (gengivelse af skallen) = 15 ms til første byte. Brugerens browser gengiver LCP-elementet fra skallen, mens resten af siden fortsætter med at blive streamet i baggrunden.
Tidspunktet for onShellReady
Præcis hvornår udløses tilbagekaldet onShellReady under streaming-SSR?
Opsummering af lektionen
Streaming-SSR fra edge leverer HTML i blokke, hvilket forbedrer FCP og LCP ved at sende skallen med det samme. Suspense-grænser opdeler træet i sektioner, der kan streames uafhængigt af hinanden. onShellReady er signalet til at begynde videresendelsen — angiv statuskoder, før du kalder den. onShellError håndterer fatale fejl, onError håndterer fejl, der kan genoprettes fra, og abort() forhindrer spildt arbejde på annullerede anmodninger.
Lær React med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 88
- Lektioner
- 324
Ofte stillede spørgsmål
Er lektionen “Streamet SSR fra edge” gratis?
Ja — hele teksten til “Streamet SSR fra edge” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af React Academy-kurset, skal du opgradere til CoddyKit PRO. React Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Streamet SSR fra edge”?
Stream Reacts HTML-output ved hjælp af ReadableStream, så browseren straks kan vise meningsfuldt indhold. Du øver dig i React Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på React Academy?
Der kræves ingen tidligere erfaring. React Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Streamet SSR fra edge”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne React Academy-lektion?
Ja. Alle React Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Hvad er edge-rendering, og hvorfor er det vigtigt
- React på Cloudflare Workers med Hono
- Streamet SSR fra edge
- Strategier for edge-caching af React-apps