Next.js
Teljesítmény & best practice
Code splitting, image/font optimalizálás, cache rétegek, PPR és projektstruktúra ajánlások.
Next.js – Teljesítmény & best practice
A teljes Next.js jegyzet 12–15. fejezetének rövidített változata.
Code splitting & dynamic import
Next.js automatikusan kódszeletel:
- minden
page.tsxsaját JS bundle, - csak az adott oldalhoz szükséges kód töltődik le.
Nagy, ritkán használt komponenseket dinamikusan tölts:
import dynamic from 'next/dynamic';
const HeavyChart = dynamic(() => import('./HeavyChart'), {
loading: () => <div>Töltés...</div>,
ssr: false, // ha csak böngészőben kell (pl. canvas)
});Kép- és fontoptimalizálás
- Minden képhez
next/image– méret, formátum, lazy loading. - Minden betűtípushoz
next/font– build‑time letöltés.
Ezek együtt nagyon sok Core Web Vitals problémát megoldanak (CLS, LCP, FOUT).
Streaming & Suspense
Kerüld, hogy az egész oldal a “leglassabb” adat miatt várjon.
import { Suspense } from 'react';
export default function Page() {
return (
<div>
<FastSection />
<Suspense fallback={<Skeleton />}>
<SlowSection />
</Suspense>
</div>
);
}Cache rétegek – csak a lényege
Next.js alatt több cache réteg van (request memoization, data cache, full route cache, router cache), de a gyakorlatban:
fetch+cache: 'force-cache'→ SSG,fetch+next: { revalidate: N }→ ISR,revalidatePath/revalidateTag→ on‑demand frissítés.
Nem kell mindent fejből tudni, inkább tartsd ezt a három szabályt szem előtt.
PPR – Partial Prerendering (koncepció)
Lehetővé teszi, hogy ugyanazon az oldalon:
- egy rész statikusan generálódjon (shell),
- más részek dinamikusan streamelődjenek.
Kísérleti funkció (Next.js 15 környékén stabilizálódik), haladó projekteknél hasznos.
Projektstruktúra – ajánlott minta
src/
├── app/ # route-ok (page, layout, loading, error, route)
│ ├── (marketing)/ # marketing rész
│ ├── (app)/ # bejelentkezett user rész
│ ├── api/ # Route Handlers
│ ├── layout.tsx
│ └── page.tsx
├── components/
│ ├── ui/ # alap UI (Button, Input, Card, stb.)
│ └── features/ # feature-specifikus komponensek
├── lib/ # db, util, külső kliensek, validáció
├── hooks/ # custom hookok
├── types/ # közös TS típusok
└── actions/ # Server Action-ökElvek:
- Server‑first – minél több logika szerveren,
- colocation – ami együtt mozog, legyen együtt,
- szétválasztott felelősségek – adatlekérés külön, megjelenítés külön,
- TypeScript mindenhol – API‑k, Action‑ök visszatérési értékei is legyenek típusozva.
Gyakori hibák, amiket érdemes kerülni
- Minden komponensre rátenni a
"use client"‑et. useEffect+fetchmindenre, ahol Server Component is elég lenne.next/routerhasználata App Router projektben (next/navigationhelyett).params/searchParamsnemawait‑elése Next.js 15‑ben.- Túl sok, fölösleges
useMemo/useCallback.
Rövid checklist új oldal készítésekor
- Meg tudom oldani Server Componentként?
- Lehet SSG/ISR a route, vagy tényleg SSR kell?
- Minden kép
next/image? - Van értelme streaming‑nek / több Suspense blokk‑nak?
- Tudom cache‑elni a fetch‑ek eredményét (
force-cache/revalidate)? - Kerültem a felesleges
"use client"és kliens oldali fetch használatát?