Migracja dużego serwisu z Pages Router na App Router
Serwis ogłoszeniowy na Next.js ma 180 stron w Pages Router, getServerSideProps wszędzie, własny layout w _app i kilka bibliotek CSS-in-JS. Zespół chce Server Components i streaming, ale nie może zamrozić rozwoju na kwartał.
Zanim rozwiniesz: powiedz na głos, jak byś to rozwiązał, i nazwij co najmniej jeden kompromis.
Moje rozwiązanie
Zapisuje się samo w tej przeglądarce. Kopię zrobisz na stronie Notatki.
Pokaż, czego szuka rekruter, i modelową odpowiedź
Co sprawdza rekruter
- Czy wiesz, że oba routery mogą działać równolegle
- Czy znasz pułapki: CSS-in-JS w RSC, granice use client, zmiany w cache
- Czy wybierasz kolejność migracji według wartości i ryzyka
Odpowiedź seniora
Migruję przyrostowo, bo katalogi pages i app działają obok siebie. Najpierw fundamenty w app: root layout, providery jako komponent kliencki, obsługa błędów i not-found, wspólny klient danych. Sprawdzam biblioteki: CSS-in-JS działający w runtime (styled-components, Emotion) wymaga rejestru stylów i działa tylko w komponentach klienckich, więc dla nowych ekranów wybieram CSS Modules lub Tailwind.
Kolejność według wartości: najpierw strony o dużym ruchu i prostej interakcji (lista ogłoszeń, szczegóły), gdzie RSC i streaming najbardziej skracają LCP i bundle. Formularze i panele użytkownika na końcu. getServerSideProps zamieniam na pobieranie w Server Component, a interaktywne kawałki wydzielam do małych komponentów klienckich na liściach.
Każda migrowana trasa ma porównanie metryk przed i po (LCP, INP, rozmiar JS, czas odpowiedzi serwera) z RUM. Uważam na zmiany w cache fetch między wersjami i ustawiam revalidate jawnie. Nawigacja między pages i app to pełne przeładowanie, więc grupuję migrację powiązanych ścieżek.
Typowe wpadki
- Big bang: przepisanie wszystkiego naraz
- Oznaczenie całego drzewa jako use client, przez co RSC nic nie daje
- Nieświadomość różnic w domyślnym cache między wersjami
- Brak pomiaru przed i po
Dopytają o
- Jak przeniesiesz autoryzację z getServerSideProps do middleware i RSC?
- Co zrobisz z biblioteką, która nie działa w Server Components?
- Jak wytłumaczysz biznesowi, po co ta migracja?