React Academy · Lezione

SSR in streaming dall’edge

Trasmetta in streaming l’output HTML di React usando ReadableStream, così il browser può visualizzare subito contenuti significativi.

Lezione 3 di 413 passaggi

SSR in streaming dall’edge è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.

Il vantaggio dello streaming

Quando un server trasmette HTML in streaming, il browser riceve e renderizza i contenuti a blocchi invece di attendere il documento completo. In questo modo gli utenti vedono e possono usare le parti visibili della pagina, come l'intestazione, la navigazione e la sezione hero, mentre le sezioni più lente e dipendenti dai dati sono ancora in caricamento.

renderToReadableStream con bootstrapScripts

Passare bootstrapScripts a renderToReadableStream indica a React dove si trova il bundle JavaScript lato client. React inserisce un tag script alla fine dello stream, così il browser carica il bundle e chiama hydrateRoot, rendendo interattiva la pagina man mano che ogni sezione completa lo streaming.

Confini Suspense nell'albero

Lo streaming di React si basa sui confini Suspense per suddividere l'albero dei componenti in sezioni che possono essere trasmesse indipendentemente. I componenti all'interno di un confine Suspense che attendono dati (tramite una Promise lanciata) vengono trasmessi inizialmente come segnaposto, quindi vengono risolti e il loro contenuto effettivo viene trasmesso in seguito.

onShellReady: quando iniziare lo streaming

Il callback onShellReady viene eseguito quando lo shell HTML non sospeso, cioè tutto ciò che si trova al di fuori dei confini Suspense, è pronto per lo streaming. Questo è il momento corretto per impostare il codice di stato HTTP e gli header della risposta, quindi chiamare pipe(res) o iniziare a leggere dal ReadableStream.

Perché i codici di stato devono essere impostati prima

I codici di stato HTTP e gli header devono essere inviati prima che inizi il corpo della risposta. Poiché lo streaming inizia con onShellReady, qualsiasi logica di gestione degli errori (impostare lo stato 500, reindirizzare) deve essere eseguita prima che lo shell inizi a fluire: una volta iniziato lo streaming, il codice di stato è definitivo.

Gestione degli errori: onShellError

onShellError viene eseguito quando si verifica un errore irreversibile prima che lo shell sia pronto, ad esempio un errore in un componente di livello superiore al di fuori di qualsiasi confine Suspense. In questo caso lo shell non viene mai trasmesso e dovrebbe rispondere con una pagina di errore statica o reindirizzare a una route di errore.

Gestione degli errori: onError

onError viene eseguito per gli errori recuperabili all'interno dei confini Suspense. React può comunque trasmettere il resto della pagina; il confine che ha generato l'errore renderizza la relativa interfaccia di fallback. Usi onError per la registrazione: acquisisca l'errore nella piattaforma di osservabilità senza interrompere lo stream.

Miglioramento progressivo e timeout

Se i dati di un boundary Suspense richiedono troppo tempo, trasmetta comunque la shell e lasci che il boundary venga idratato sul client. Implementi un timeout: dopo 5 secondi, chiami abort() sullo stream se il boundary non è stato risolto; il client recupererà autonomamente i dati tramite useEffect.

Meccanismi dello streaming di Cloudflare Workers

Il runtime di Workers passa direttamente ReadableStream come corpo della Response. L'infrastruttura di Cloudflare inoltra ogni chunk al browser dell'utente man mano che React lo produce, senza bufferizzare l'intero documento. Ciò significa che i primi byte di HTML lasciano il PoP edge entro pochi millisecondi dall'arrivo della richiesta.

Abort: controllo dei flussi lunghi

renderToReadableStream restituisce una funzione per interrompere il rendering. Se la richiesta viene annullata, ad esempio perché l'utente cambia pagina, chiamando abort() si impedisce a React di continuare a eseguire il rendering e a elaborare i dati. In questo modo si evitano calcoli sprecati per richieste orfane e si mantiene entro limiti prevedibili l'utilizzo della CPU del Worker.

Profilo della latenza end-to-end

Con lo streaming edge, la catena completa della latenza è la seguente: 5 ms (dalla richiesta al PoP più vicino) + 2 ms (avvio a freddo del Worker) + 8 ms (rendering della shell) = 15 ms al primo byte. Il browser dell'utente esegue il rendering dell'elemento LCP dalla shell, mentre il resto della pagina continua a essere trasmesso in streaming in background.

Tempistica di onShellReady

Quando viene eseguito esattamente il callback onShellReady durante lo streaming SSR?

Riepilogo della lezione

Lo streaming SSR dall'edge consegna l'HTML in chunk, migliorando FCP e LCP perché invia immediatamente la shell. I boundary Suspense dividono l'albero in sezioni che possono essere trasmesse in streaming indipendentemente. onShellReady segnala che è possibile iniziare il piping: imposti i codici di stato prima di chiamarlo. onShellError gestisce gli errori fatali, onError quelli recuperabili e abort() evita di sprecare lavoro per le richieste annullate.

Gratis per iniziare

Impara React con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
88
Lezioni
324

Domande Frequenti

La lezione «SSR in streaming dall’edge» è gratuita?

Sì — il testo completo di «SSR in streaming dall’edge» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.

Cosa imparerò in «SSR in streaming dall’edge»?

Trasmetta in streaming l’output HTML di React usando ReadableStream, così il browser può visualizzare subito contenuti significativi. Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare React Academy?

Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «SSR in streaming dall’edge»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione React Academy?

Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Che cos’è l’edge rendering e perché è importante
  2. React su Cloudflare Workers con Hono
  3. SSR in streaming dall’edge
  4. Strategie di caching edge per le app React
← Torna a React Academy