Гайды
Next.js: SSR и статическая генерация
App Router, Server Components, SSG и ISR, fetch на сервере, metadata и деплой standalone.
~10 мин чтения
Next.js: SSR и статическая генерация
Next.js — React-фреймворк с маршрутизацией по файлам, SSR/SSG/ISR, API routes / Server Actions, оптимизацией картинок. Версии 13+ — App Router (app/). База React — React: компоненты и хуки; сборка — Webpack и Vite (Next использует Turbopack/webpack под капотом).
1. Рендеринг: термины
| Режим | Когда генерируется HTML |
|---|---|
| SSG | При сборке (generateStaticParams) |
| SSR | На каждый запрос на сервере |
| ISR | SSG + ревалидация по времени/on-demand |
2. App Router: Server Components
По умолчанию компоненты в app/ — серверные (без useState). Клиентские — директива "use client".
3. Данные на сервере
async function Page() — fetch на сервере без утечки секретов в бандл. Кэш fetch настраивается опциями Next.
В App Router по умолчанию fetch может кэшироваться между запросами — для персональных данных передайте cache: 'no-store' или пометьте route как export const dynamic = 'force-dynamic'. Для данных, которые редко меняются, next: { revalidate: 60 } даёт ISR на уровне fetch без отдельного generateStaticParams.
4. Мета и SEO
metadata export, generateMetadata для динамики, sitemap.ts, robots.ts.
5. Деплой
Vercel, Node standalone output, Docker — см. Docker: контейнеризация.
6. Кэширование и revalidate
revalidate (ISR) и export const dynamic = 'force-static' / 'force-dynamic' явно задают поведение. Для данных из CMS комбинируйте on-demand revalidation (revalidatePath / revalidateTag) с тегами в fetch. Не кэшируйте персональные ответы на shared CDN без private семантики.
7. Server Actions и безопасность
Server Actions выполняются на сервере; валидируйте вход так же, как в API route. Ограничивайте размер тела и защищайте от CSRF там, где фреймворк не делает это автоматически (следите за релизами Next).
8. Чек-лист
- Явно решить, что client-only (браузерные API).
- Streaming и loading.tsx для UX.
- Анализ бандла (
@next/bundle-analyzer). -
next/imageс корректными remotePatterns для внешних доменов. - Middleware для редиректов/auth — держите лёгким (без тяжёлого I/O).
Дальше: тег Next.js