React Academy · Oppitunti

React 18:n suoratoisto: renderToPipeableStreamin toiminta

Ymmärrä, miten renderToPipeableStream lähettää HTML-osia vaiheittain ennen kuin kaikki asynkroninen data on valmis.

Oppitunti 1/413 vaihetta

React 18:n suoratoisto: renderToPipeableStreamin toiminta on ilmainen React Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu React Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. React Academy-kurssilla on yhteensä 4 oppituntia.

Ennen React 18: synkroninen pullonkaula

Ennen React 18:aa palvelinrenderöinnissä käytettiin renderToStringia, joka on synkroninen: React renderöi koko komponenttipuun merkkijonoksi ennen minkään HTML:n lähettämistä selaimeen. Jos jokin komponentti lataa tietoja, palvelimen on odotettava kaikkien tietojen valmistumista, ennen kuin ensimmäinen tavu saavuttaa käyttäjän.

React 18: renderToPipeableStream

React 18 toi käyttöön renderToPipeableStreamin, joka renderöi komponenttipuun HTML-palasten virtana. Sen sijaan että React odottaisi kaiken valmistumista, se lähettää HTML:ää sitä mukaa kuin puun osat valmistuvat, jolloin selain voi aloittaa näkyvän sisällön renderöinnin heti.

Rakenne: pipe ja abort

renderToPipeableStream palauttaa olion, jossa on kaksi metodia: pipe(writable) ja abort(). pipe vastaanottaa Node.js Writable -streamin (tyypillisesti HTTP-vastauksen) ja aloittaa HTML:n streamauksen siihen. abort() peruuttaa streamin, ja sitä käytetään, kun pyyntö peruutetaan tai aikakatkaisu ylittyy.

Mikä streamataan ensin: shell

Stream alkaa HTML-shellistä eli kaikesta sisällöstä, jota odottava Suspense-rajaus ei estä. Tähän kuuluvat dokumentin head, navigaatio, alatunniste, layoutin rakenteet ja kaikki synkronisesti saatavilla oleva sisältö. Shell streamataan heti, ennen kuin mitkään tiedoista riippuvaiset komponentit valmistuvat.

Suspense-fallbackit streamissa

Suspense-rajausten sisällä olevat tietoja odottavat komponentit streamataan aluksi fallback-UI:na (esimerkiksi latausspinnerinä). React lähettää myöhemmin script-tagin, joka korvaa fallbackin valmiilla sisällöllä — ilman shellin uudelleenrenderöintiä clientillä.

bootstrapScripts asiakaspuolen hydraatiota varten

Välitä renderToPipeableStreamille bootstrapScripts: ['/static/js/client.js'], jotta React lisää script-tagin streamin loppuun. Selain lataa tämän bundlen ja kutsuu hydrateRootia, joka liittää Reactin tapahtumankäsittelijät palvelimella renderöityyn DOM:iin.

onShellReady: oikea hetki aloittaa streamaus

onShellReady suoritetaan, kun HTML-shell (kaikki odottavien Suspense-rajausten ulkopuolinen sisältö) on valmis lähetettäväksi. Tällöin on oikea hetki kutsua pipe(res)-metodia — mutta HTTP-statuskoodi ja vastauksen otsakkeet on tärkeää asettaa ennen pipe-kutsua, koska streamaus lukitsee HTTP-statuksen.

Otsakkeiden määrittäminen ennen streamausta

Koska streamaus alkaa heti, kun kutsutte pipe()-funktiota, kaikkien res.setHeader- tai res.statusCode-määritysten on tapahduttava ennen pipe()-kutsua. Yleinen käytäntö on asettaa tilakoodiksi 200 ja Content-Type: text/html -otsakkeeksi onShellReady-callbackissa ja kutsua heti sen jälkeen pipe(res)-funktiota.

onShellError: Kriittiset virheet ennen shelliä

onShellError suoritetaan, kun ennen shellin renderöinnin valmistumista tapahtuu virhe, josta ei voida palautua — esimerkiksi kun ylätason komponentti aiheuttaa poikkeuksen Suspense-rajan ulkopuolella. Tällöin osittaista vastausta ei voi streamata. Ohjatkaa käyttäjä sen sijaan virhesivulle tai lähettäkää staattinen HTML-virhedokumentti.

onAllReady: Boteille ja indeksoijille

onAllReady suoritetaan, kun koko React-puu on valmis — myös kaikki Suspense-rajat. Hakukoneiden indeksointiroboteille ja sosiaalisen median linkkien esikatseluille kannattaa lähettää valmis HTML ilman streamausta. Tarkistakaa, onko pyyntö peräisin botilta, ja kutsukaa pipe(res)-funktiota onAllReady-tapahtumassa onShellReady-tapahtuman sijaan.

Virheistä palautuminen streamauksen aikana

onError suoritetaan Suspense-rajoissa tapahtuvien virheiden yhteydessä. React pystyy silti streamaamaan muun sivun, kun kyseinen raja näyttää virhenäkymän. Käyttäkää onError-funktiota virheen kirjaamiseen observability-putkeen keskeyttämättä käyttäjän streamausta.

onAllReady vai onShellReady

Milloin onAllReady-tapahtumaa pitäisi käyttää onShellReady-tapahtuman sijaan streamauksen aloittamiseen?

Oppitunnin yhteenveto

renderToPipeableStream on React 18:n Node.js-palvelimille tarkoitettu streamaavan SSR:n perusratkaisu. Se streamaa HTML-shellin heti onShellReady-tapahtuman kautta, täydentää Suspense-rajoja datan valmistuessa ja hydratoi asiakkaan bootstrapScripts-määrityksen avulla. Käyttäkää onAllReady-tapahtumaa boteille ja indeksoijille, onShellError-tapahtumaa kriittisiin virheisiin ja määrittäkää HTTP-otsakkeet aina ennen pipe()-funktion kutsumista.

Aloita maksutta

Opi React tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
88
Oppitunnit
324

Usein kysytyt kysymykset

Onko oppitunti ”React 18:n suoratoisto: renderToPipeableStreamin toiminta” ilmainen?

Kyllä – oppitunnin ”React 18:n suoratoisto: renderToPipeableStreamin toiminta” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko React Academy-kurssin, päivitä CoddyKit PROhon. React Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”React 18:n suoratoisto: renderToPipeableStreamin toiminta”?

Ymmärrä, miten renderToPipeableStream lähettää HTML-osia vaiheittain ennen kuin kaikki asynkroninen data on valmis. Harjoittelet React Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni React Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin React Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”React 18:n suoratoisto: renderToPipeableStreamin toiminta”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä React Academy-oppitunnilla?

Kyllä. Jokainen React Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. React 18:n suoratoisto: renderToPipeableStreamin toiminta
  2. Suspense-rajat ja suoratoiston prioriteetti
  3. Progressiivinen hydraatio valikoivalla hydraatiolla
  4. Suoratoiston vaikutuksen mittaaminen: FCP, TTI ja LCP
← Takaisin: React Academy