Три способа fetch по preference: Server Component await, Server Action для mutations/on-demand reads, client fetch только для interaction-driven data после hydration.
Разбор
Next extends native fetch caching (cache, next.revalidate, next.tags). Identical fetch в one render — React request memoization dedupe; getUser() в layout и page — один request. Non-fetch (DB/SDK) — wrap в React cache() для per-request dedupe.
Parallel + streaming: не await на top — pass promise down или wrap slow part в <Suspense>, остальная page renders immediately.
- Server
await — default, secrets safe.
- Server Action — mutations.
- Client (
useEffect, SWR, React Query) — live search, infinite scroll after hydration only.
Итог
Preference order + memoization/cache() + Suspense для slow slices — operational model data fetching в App Router.