React Academy · Pelajaran

Hidrasi Terpilih & Penstriman HTML

Gunakan sempadan Suspense untuk menstrim cebisan HTML dan menghidrat pulau interaktif terlebih dahulu.

Pelajaran 3 daripada 413 langkah

Hidrasi Terpilih & Penstriman HTML ialah pelajaran React Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran React Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus React Academy merangkumi sejumlah 4 pelajaran.

Masalah Penghidratan Seluruh Halaman

SSR tradisional menghidrat seluruh halaman sekaligus. Jika satu bahagian halaman mempunyai JavaScript yang berat (seperti peta atau carta), bahagian itu menyekat penghidratan bahagian lain — termasuk butang interaktif yang mudah.

HTML Penstriman dengan renderToPipeableStream

API penstriman React 18 menghantar HTML dalam cebisan. Rangka halaman tiba serta-merta; sempadan Suspense mengisi kandungan apabila ia selesai — pengguna melihat antara muka pengguna sebelum semua data tersedia.

const { pipe } = renderToPipeableStream(<App />, {
  bootstrapScripts: ['/bundle.js'],
  onShellReady() {
    res.setHeader('content-type', 'text/html');
    pipe(res);
  },
  onError(error) {
    console.error(error);
  },
});

Cara Penstriman Berfungsi dalam Amalan

React memaparkan komponen yang tidak menunggu data dengan segera (rangka). Apabila data sempadan Suspense selesai, React menghantar cebisan HTML untuk mengisinya, berserta tag skrip yang mengarahkan pelayar ke tempat untuk meletakkannya.

Penghidratan Terpilih

Dengan penstriman, React 18 boleh menghidrat komponen secara berasingan. Jika pengguna mengklik elemen yang belum dihidratkan, React mengutamakan penghidratan komponen itu dahulu — kemudian meneruskan penghidratan bahagian yang lain.

Sempadan Suspense sebagai Unit Penstriman

Setiap sempadan <Suspense> ialah unit penstriman. Kandungan sandaran dihantar serta-merta; kandungan sebenar distrim kemudian. Susun sempadan Suspense secara bertingkat untuk menstrim pada tahap butiran yang sesuai.

function App() {
  return (
    <Layout>
      {/* Streams first — no data needed */}
      <Header />
      <Suspense fallback={<ArticleSkeleton />}>
        {/* Streams when article data resolves */}
        <Article />
      </Suspense>
      <Suspense fallback={<CommentsSkeleton />}>
        {/* Streams independently from Article */}
        <Comments />
      </Suspense>
    </Layout>
  );
}

Penstriman Next.js dengan loading.tsx

Dalam Penghala Aplikasi Next.js, loading.tsx ialah sandaran Suspense. Rangka halaman (susun atur) distrim dahulu; kandungan halaman distrim apabila fungsi tak segeraknya selesai.

// app/blog/loading.tsx — shown while page.tsx data loads
export default function Loading() {
  return <ArticleSkeleton />;
}

// app/blog/page.tsx — fetches data, streams when ready
export default async function BlogPage() {
  const posts = await fetchPosts(); // data fetch happens server-side
  return <PostList posts={posts} />;
}

Komponen Klien dalam Suspense

Komponen Pelayan menggunakan Suspense untuk penstriman data. Komponen Klien menggunakan Suspense untuk pemuatan malas. Kedua-duanya mendapat manfaat daripada hidrasi terpilih.

// Lazy-loaded client component — hydrates selectively
const HeavyChart = lazy(() => import('./HeavyChart'));

function Dashboard() {
  return (
    <Suspense fallback={<ChartSkeleton />}>
      <HeavyChart />
    </Suspense>
  );
}

Hidrasi Berasaskan Keutamaan

Jika pengguna berinteraksi dengan komponen yang belum dihidrasi (contohnya, klik), React 18 menghidrasi komponen tersebut secara segerak terlebih dahulu, sebelum melengkapkan hidrasi bahagian lain halaman.

onShellReady berbanding onAllReady

onShellReady dicetuskan apabila rangka (bahagian yang tidak digantung) sedia untuk distrim. onAllReady dicetuskan apabila segala-galanya telah dipaparkan — berguna untuk penjanaan statik atau apabila anda mesti menghantar HTML penuh sekaligus.

// For streaming (progressive rendering):
onShellReady() { pipe(res); }

// For full HTML (e.g., static export, SEO bots):
onAllReady() { pipe(res); }

Pengawal Pembatalan

Hantar isyarat AbortController untuk membatalkan SSR bagi paparan yang lambat (contohnya, apabila had masa telah dilampaui).

const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 5000); // 5s timeout

const { pipe } = renderToPipeableStream(<App />, {
  signal: controller.signal,
  onShellReady() { pipe(res); },
});

clearTimeout(timeoutId);

Mengukur Kesan Penstriman

Gunakan Lighthouse atau WebPageTest untuk mengukur Masa hingga Bait Pertama (TTFB) dan Cat Kandungan Terbesar (LCP) sebelum dan selepas mengaktifkan penstriman bagi mengukur peningkatan dengan tepat.

Semakan Pantas

Apakah yang berlaku dalam hidrasi terpilih React 18 apabila pengguna mengklik elemen yang masih belum dihidrasi?

Ringkasan

SSR penstriman menggunakan renderToPipeableStream dan sempadan Suspense untuk menghantar HTML secara berperingkat. Setiap sempadan Suspense distrim secara bebas. Hidrasi terpilih mengutamakan elemen yang berinteraksi dengan pengguna. Dalam Next.js, loading.tsx ialah sandaran Suspense automatik untuk penstriman peringkat halaman.

Percuma untuk bermula

Pelajari React dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
88
Pelajaran
324

Soalan Lazim

Adakah pelajaran “Hidrasi Terpilih & Penstriman HTML” percuma?

Ya — teks penuh “Hidrasi Terpilih & Penstriman HTML” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus React Academy, tingkat taraf kepada CoddyKit PRO. Kursus React Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Hidrasi Terpilih & Penstriman HTML”?

Gunakan sempadan Suspense untuk menstrim cebisan HTML dan menghidrat pulau interaktif terlebih dahulu. Anda berlatih React Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan React Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran React Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Hidrasi Terpilih & Penstriman HTML” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Cara SSR React Berfungsi di Sebalik Tabir
  2. Ralat Hidrasi: Punca & Penyelesaian
  3. Hidrasi Terpilih & Penstriman HTML
  4. Corak Seni Bina Pulau
← Kembali ke React Academy