React Academy · Lektion

Suspense-gränser och prioritet vid strömning

Placera Suspense-gränser för att styra vilka HTML-delar som strömmas först och när reservinnehåll blir riktigt innehåll.

Lektion 2 av 413 steg

Suspense-gränser och prioritet vid strömning är en gratis lektion i React Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.

Suspense som streamingavgränsare

Suspense-gränser är den grundläggande enheten för streamingens granularitet. Varje Suspense-gräns i komponentträdet skapar ett avsnitt som kan streamas oberoende – React kan lösa upp och streama varje gräns i sin egen takt, oberoende av alla andra.

Skalet: snabbt, synkront innehåll

Skalet består av allt utanför Suspense-gränserna – layouten, navigeringen, sidfoten och allt innehåll som är tillgängligt synkront. Skalet streamas först och snabbt, så att användarna omedelbart får se sidans struktur medan databeroende avsnitt läses in i bakgrunden.

Reservinnehåll i den ursprungliga HTML-koden

När React streamar skalet renderas alla Suspense-gränser vars data ännu inte är tillgängliga med sitt reservgränssnitt – vanligtvis ett laddningsskelett eller en spinner. Reservgränssnittet ingår i det ursprungliga HTML-svaret, så att användaren omedelbart ser en laddningsindikator i stället för ett tomt utrymme.

Lösa upp och ersätta reservinnehåll

När data för en Suspense-gräns har lösts upp streamar React den färdiga HTML-koden tillsammans med ett litet inline-skript. Skriptet flyttar det nystreamade innehållet från ett dolt template-element till rätt plats i DOM-trädet och ersätter reservinnehållet utan att hela sidan behöver läsas in på nytt.

Mönstret med inline-skript

React använder mönstret med HTML-elementet template: det färdiga Suspense-innehållet streamas in i en dold template, och sedan anropar ett skript en intern React-funktion som byter ut template-innehållet mot rätt plats i DOM-trädet. Det möjliggör DOM-manipulering utan JavaScript-ramverk vid ersättningen.

Kapslad Suspense: Oberoende tidslinjer

Kapslade Suspense-gränser har oberoende tidslinjer för när de löses upp. En inre Suspense-gräns kan lösas upp före sin yttre gräns – React streamar det inre innehållet så snart det är klart, oavsett om den yttre gränsen har lösts upp. Det maximerar parallelliteten vid dataladdning.

Placeringsstrategi: vad hör hemma var

En effektiv placering av Suspense innebär att långsamma, databeroende komponenter placeras inuti Suspense-gränser, medan snabbt, statiskt eller synkront tillgängligt innehåll placeras utanför. Navigeringsfält, hero-sektioner med statisk text och sidfötter hör hemma utanför. Produktlistor, användarpaneler och kommentarsflöden hör hemma inuti.

Streamingordning: inte nödvändigtvis dokumentordningen

React streamar Suspense-gränser när de löses upp – inte nödvändigtvis i den ordning de förekommer i dokumentet. Ett avsnitt längre ned på sidan kan lösas upp före ett avsnitt högre upp om det kräver mindre data. React hanterar insättningen i DOM-trädet korrekt oavsett streamingordning.

Prioritetssignaler och användarinteraktion

React 18:s selektiva hydrering reagerar på användarinteraktion: om användaren klickar på eller håller pekaren över en Suspense-gräns som ännu inte har hydreras prioriterar React hydreringen av den gränsen. Det gör att användarinteraktioner känns responsiva även när andra delar av sidan fortfarande hydreras.

Undvika alltför finkorniga gränser

Fler Suspense-gränser ger större flexibilitet vid streaming, men för många gränser medför overhead från inline-skript för ersättning. En praktisk riktlinje är att omsluta hela "sektioner" (innehåll i den första viewporten, sidofält och flöden längre ned på sidan) i stället för enskilda komponenter. En till tre Suspense-gränser per sida är ofta en bra kompromiss.

Mäta streamingens effekt med Chrome DevTools

Använd "Preserve log" på fliken Network i Chrome DevTools och observera hur svaret streamas: HTML-dokumentet växer i delar. På fliken Performance visas markörer för FCP och LCP – jämför streamingbyggen med byggen utan streaming för att kvantifiera förbättringen. Begränsa anslutningen till Fast 3G för att förstärka effekten.

Suspense-reservinnehåll i streamad HTML

Vad händer med reservinnehållet för en Suspense-gräns i det ursprungliga streamade HTML-svaret?

Lektionssammanfattning

Suspense-gränser delar upp React-trädet i avsnitt som kan streamas oberoende av varandra. Skalet (utanför Suspense) streamas först, reservinnehåll visas omedelbart för gränser som väntar och färdigt innehåll ersätter reservinnehållet via inline-skript. Kapslade gränser har oberoende tidslinjer. Placera gränser på sektionsnivå för optimal streaminggranularitet och låt Reacts prioritetssystem hantera ordningen för hydrering som utlöses av interaktioner.

Gratis att börja

Lär dig React med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
88
Lektioner
324

Vanliga frågor

Är lektionen ”Suspense-gränser och prioritet vid strömning” gratis?

Ja – hela texten till ”Suspense-gränser och prioritet vid strömning” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Suspense-gränser och prioritet vid strömning”?

Placera Suspense-gränser för att styra vilka HTML-delar som strömmas först och när reservinnehåll blir riktigt innehåll. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig React Academy?

Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Suspense-gränser och prioritet vid strömning”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här React Academy-lektionen?

Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Strömmande React 18: så fungerar renderToPipeableStream
  2. Suspense-gränser och prioritet vid strömning
  3. Progressiv hydrering med selektiv hydrering
  4. Mäta effekten av strömning: FCP, TTI och LCP
← Tillbaka till React Academy