"매 route 전환은 매 사용자가 매 가장 자주 만나는 perf moment". SPA에서 매 route 전환 latency는 매 INP/Core Web Vitals에 매 직접 영향. 2026년에는 매 React Router 7, TanStack Router, Next 15 App Router가 매 표준이며, 매 streaming + prefetch + view-transitions가 매 키.
매 핵심
매 병목 분류
JS bundle: 매 새 route chunk download/parse.
Data fetch: 매 loader/query waterfall.
Render: 매 new tree mount cost.
Asset: 매 image/font 신규 load.
매 최적화 lever
Code-split (route-level lazy).
Prefetch (hover/viewport/intent).
Parallel data load (loader pattern, no waterfall).
import{Link}from"@tanstack/react-router";<Linkto="/products/$id"params={{id}}preload="intent">Product</Link>// 매 hover/focus → 매 chunk + loader data 미리.
매 Parallel loaders (waterfall 제거)
// X — sequential
constroute=createRoute({loader: async()=>{constuser=awaitfetchUser();// 매 wait
constorders=awaitfetchOrders(user.id);// 매 then wait
return{user,orders};},});// O — parallel where possible
constroute=createRoute({loader: async({params})=>{const[user,orders]=awaitPromise.all([fetchUser(params.id),fetchOrdersForId(params.id),// 매 user 의존 X로 변경
]);return{user,orders};},});
매 View Transitions API
// 매 navigation에 매 native cross-fade
import{unstable_ViewTransitionasViewTransition}from"react";functionApp() {return(<ViewTransition><Outlet/></ViewTransition>);}
// app/products/[id]/page.tsx
exportdefaultasyncfunctionPage({params}:{params:{id: string}}){return(<><ProductHeaderid={params.id}/>{/* 매 빠른 part */}<Suspensefallback={<Skeleton/>}><ProductReviewsid={params.id}/>{/* 매 느린 part stream */}</Suspense></>);}
매 Optimistic navigation
// React 19 useOptimistic 응용
const[optimisticPath,setOptimisticPath]=useOptimistic(currentPath);functionnavigate(to: string){startTransition(()=>{setOptimisticPath(to);// 매 즉시 UI 변경
router.navigate(to);});}
매 Bundle 분석 (rsdoctor / webpack-bundle-analyzer)
pnpm dlx @rsdoctor/cli analyze
# 매 route chunk 크기 매 visualize → 매 split point 매 결정
매 결정 기준
상황
Approach
매 small SPA
Route-split + hover prefetch.
매 dashboard 다중 widget
Parallel loaders + Suspense streaming.
매 SEO + perf
Next 15 App Router (RSC).
매 highly interactive
TanStack Router + View Transitions.
매 mobile-first
Aggressive prefetch는 매 신중 (data cost).
기본값: Route-split + intent prefetch + parallel loaders. 매 modern routers는 매 default support.