With streaming, the server can send HTML in chunks as data resolves. `Suspense` boundaries (and `loading.tsx`) show a fallback while a segment loads, improving perceived performance and TTFB.
With React 18, the server can **stream** HTML progressively instead of waiting for the whole page to be ready. `Suspense` boundaries define where the UI can “pause”: Next can send the shell immediately, show a fallback, and then stream in the real content when data resolves.
In the App Router:
// app/dashboard/loading.tsx
export default function Loading() {
return <div className="skeleton">Loading dashboard…</div>
}