Next.js 15 (App Router + RSC)
Nasz werdykt
Domyślny wybór dla application-heavy headless frontu. RSC stabilne po 18 miesiącach w produkcji.
Brief praktyka
Dlaczego to wdrożyliśmy
Wypuściliśmy cztery klienckie powłoki aplikacji na Next.js 15 między listopadem 2025 a kwietniem 2026. TTFB na spersonalizowanej trasie dashboardu streamowanej z RSC plus PPR (Partial Prerendering, RFC vercel/next.js#54647 autorstwa Sebastiana Markbåge i Andrew Clarka): powłoka renderuje się w 240 ms, a spersonalizowany slot dostreamowuje poniżej 800 ms. Ten sam widok w poprzedniej aplikacji klienta na pages-routerze to była ściana 1,6 s TTFB czekająca na jedno getServerSideProps. Czasy buildu spadły z 9 min do 6 min, gdy Turbopack ustabilizował się w next build (15.2). Bundle dashboardu sprzedawcy zmalał z 410 KB gzip do 230 KB po RSC plus selektywnym 'use client'.
Kiedy po niego sięgamy
Briefy o kształcie aplikacji: dashboardy za logowaniem, wieloetapowy checkout, portale B2B z UI zależnym od roli, spersonalizowane listingi commerce, które potrzebują streamowanych slotów nad linią zgięcia. Powierzchnie redakcyjne idą do Astro 5. Streaming RSC szkodzi, gdy payloady są małe, gdy jeden wolny upstream niweczy zysk albo gdy zespół wrzuca 'use client' na poziomie layoutu.
Ścieżka migracji
Z Next.js 14 pages router migracja to prawdziwy projekt, nie przełączenie flagi. Codemod Lee Robinsona (@next/codemod app-dir) ogarnia strukturę plików, ale nie potrafi wnioskować o kształcie pobierania danych. Reszta pracy to rozdzielenie komponentów na warstwę serwerową i kliencką oraz ustalenie, które konteksty leżą poniżej granicy 'use client'. Zaplanuj dwa tygodnie inżynierskie na aplikację z 40 trasami, trzy przy współdzielonym koszyku albo kontekście autoryzacji. Z Remix v2 przejście jest trudniejsze, niż się wydaje: loadery i akcje to inny model myślowy niż RSC plus server actions. Co się nie przenosi: store'y Redux działające wyłącznie po stronie klienta, getInitialProps, większość middleware z pages routera.
Dwie blizny z produkcji
Po pierwsze, RSC streaming plus Tailwind v4 plus edge runtime rozwaliły generowanie dynamicznych klas w portalu B2B w lutym 2026. Skaner JIT Tailwinda działa, zanim wyrenderuje się komponent serwerowy, więc klasy interpolowane wewnątrz payloadów RSC są dla niego niewidoczne. Poprawka: predeklaracja permutacji w safelist w tailwind.config.mjs. Po drugie, server actions plus adapter OpenNext dla Cloudflare wywołały się podwójnie przy ponowieniu checkoutu: użytkownik dwukrotnie stuknął Zapłać w ciągu 800 ms i obciążyliśmy kartę dwa razy. Poprawka weszła w OpenNext 3.4 (sst/opennext PR #492), a my dołożyliśmy ciasteczko z kluczem idempotencji, żeby starsze buildy adaptera też nie robiły nic drugi raz.
Co obserwujemy
Partial Prerendering w GA w Next.js 15.5 pozwoli nam przestać utrzymywać dwie strategie renderowania na tej samej trasie (vercel/next.js#54647). useOptimistic z React 19.1 plus typowane wyniki server actions upraszczają ścieżkę aktualizacji koszyka. Obserwujemy też API after() do pracy po odpowiedzi oraz postępy OpenNext w parytecie ISR na Workers (sst/opennext milestone 4.0).
Dodano: 2026-04-26 · Ostatni przegląd: 2026-04-26