Why streaming exists
Without streaming, the server has to wait for every piece of data before sending the first byte of HTML. With streaming, the framework sends the shell + cheap parts immediately, and streams the slower parts as their data resolves.
The two ways to stream
| Approach | Granularity |
|---|---|
loading.tsx | Whole route segment — framework wraps it in Suspense for you |
<Suspense fallback> | Per component — you choose what streams independently |
How it feels to the user
The page header and navigation appear instantly; the slow chart shows its skeleton; when the chart's data arrives, the skeleton swaps for the real content — without re-rendering the page above.