Dynamic page without a loading boundary
Why it matters
A page rendered per request that awaits data, with no loading.tsx or <Suspense> above it, sends nothing until its slowest await resolves: TTFB and FCP wait for the database.
Fix
Add loading.tsx to the segment, or move the slow part into an async component wrapped in <Suspense>.
Credit
From the Next.js team
loading.js and Suspense let Next.js stream a fallback immediately instead of waiting for the slowest data.
From the React team
Suspense shows a fallback while children load.
References
- loading.jsNext.js
- StreamingNext.js
- <Suspense>React
- Time to First Byte (TTFB)web.dev