Продакшн-архітектура Next.js 15: App Router, PPR і масштабоване кешування
Практичний посібник зі структури Next.js 15 застосунку для продакшену: Server Components, Partial Prerendering, інвалідація кешу та патерни розгортання.

Це технічна стаття для розробників. Якщо ви керуєте салоном, рестораном або ремісничим бізнесом, почніть краще звідси: скільки насправді коштує сайт і що справді потрібно вашому сайту.
Next.js 15 пропонує набір можливостей, які за правильного використання дають змогу створювати застосунки, що водночас швидко завантажуються, недорого обслуговуються й легко підтримуються. За неправильного використання ті самі можливості породжують проблеми з кешуванням, які болісно налагоджувати в продакшені. У цій статті розглянемо архітектурні рішення, які справді мають значення.
Ментальна модель: де виконується код?
Перш ніж написати хоча б один рядок, дайте відповідь на це питання для кожного компонента:
| Питання | Відповідь → |
| ----------------------------------- | --------------------------------------- |
| Дані змінюються для кожного запиту? | Server Component із cache: 'no-store' |
| Дані змінюються за розкладом? | Server Component із revalidate |
| Дані ніколи не змінюються? | Повністю статичний Server Component |
| Потрібна інтерактивність? | Client Component ('use client') |
За замовчуванням App Router використовує Server Components. Додавання 'use client' — це явний вибір, а не вихідна точка.
Структура каталогів для реального застосунку
app/
[locale]/
(public)/ ← layout із navbar/footer
page.tsx ← головна, статична
blog/
page.tsx ← список, revalidate: 60
[slug]/page.tsx ← детальна сторінка, static + ISR
portfolio/
page.tsx ← статична
(protected)/ ← layout із перевіркою auth
dashboard/
page.tsx ← динамічна, без кешу
api/
contact/route.ts ← POST, з rate limit
og/route.ts ← динамічне OG-зображення
Route groups (public) і (protected) використовують різні layouts, не впливаючи на URL. Це чистіше, ніж обгортати кожну захищену сторінку в перевірку auth.
Server Components: патерни отримання даних
Паралельне отримання через Promise.all
Не використовуйте послідовні await, коли запити незалежні:
ts
Дедуплікація запитів через React cache
Коли кільком компонентам на одній сторінці потрібні ті самі дані, React.cache гарантує, що fetch виконається один раз за render:
ts
І <Header>, і <Dashboard> можуть викликати getUser(id), але запит до бази даних виконається лише один раз.
Partial Prerendering (PPR)
PPR — найсуттєвіша архітектурна зміна в Next.js 15. Вона дає змогу зробити один route частково статичним:
ts
HTML-оболонка з <HeroSection> кешується на edge. Динамічні частини надходять потоком усередині Suspense boundary. Користувач бачить контент менш ніж за 100 ms, а персоналізовані дані з’являються трохи пізніше.
Стратегія інвалідації кешу
У Next.js 15 є три рівні кешу. Важливо розуміти, який із них потрібно інвалідувати:
ts
Підхід із revalidateTag краще масштабується, ніж revalidatePath, оскільки ви позначаєте дані на рівні fetch, а не route. Один API-виклик інвалідує кожну сторінку, яка використала ці дані.
Middleware для i18n і auth
Middleware виконується на edge до рендерингу сторінки. Залишайте його мінімальним — він працює для кожного запиту:
ts
Уникайте запитів до бази даних у middleware. Перевіряйте лише cookies або JWT claims — усе важче має бути в Server Component сторінки.
Чекліст розгортання в продакшн
Перед push у Vercel:
bash
Звертайте увагу на:
- Server Components, які випадково імпортують пакети лише для клієнта —
window,localStorage - Виклики
cookies()абоheaders()поза динамічним контекстом — це вимикає статичну генерацію для всього route - Зображення без явних
width/height, які спричиняють layout shift
Висновок
Сила App Router походить із розуміння межі між статичним і динамічним кодом та її свідомого розташування. За замовчуванням обирайте статичний рендеринг, додавайте Suspense boundaries для динамічних секцій, позначайте fetch-запити тегами для точкової інвалідації та не перевантажуйте middleware. Ці чотири рішення запобігають 90% проблем із продуктивністю в продакшені ще до їх появи.
Працюєте над чимось подібним?
Я створюю швидкі маркетингові сайти й системи онлайн-запису для малого бізнесу по всій Європі — як незалежний фахівець, віддалено. Відповідаю протягом 24 годин.
Зв’язатисяСхожі статті
Сайт для ремісничого бізнесу: заявки замість пропущених дзвінків
Чому електрики, сантехніки та інші майстри втрачають замовлення телефоном — і як сайт із формою заявки, завантаженням фото та екстреним контактом перетворює пропущені дзвінки на структуровані звернення. З інтерактивним демо.
Прочитати статтюBooksy, Fresha та інші платформи чи власний сайт для запису: чесне порівняння
Що маркетплейси запису справді дають салонам, скільки вони коштують у довгостроковій перспективі та коли доцільний власний сайт з онлайн-записом. Зважене порівняння без категоричного «або-або».
Прочитати статтю