실험적 캐시 내비게이션

Experimental cached navigations

Next.js 16.2의 실험 기능으로, 방문 때 받은 Server Components 데이터를 재방문에 재사용합니다.

···
html
<section class="stage"><div class="heading">CACHED NAVIGATION <span class="hint">first visit / revisit</span></div><div class="nav"><div class="tile page-a">PAGE A</div><div class="track"><i></i></div><div class="tile page-b">PAGE B</div></div><div class="status" id="nav-status">A → B: network</div><div class="caption">On return, stored RSC data replaces a fetch</div></section>
css
.stage{width:min(94vw,780px);height:min(88vh,322px);padding:clamp(12px,3vmin,20px);border:1px solid var(--line);border-radius:16px;background:var(--surface);box-shadow:0 12px 36px #0001;display:flex;flex-direction:column;gap:clamp(7px,2vmin,14px);font:500 clamp(12px,3.5vmin,17px)/1.3 var(--font-sans,system-ui,sans-serif);overflow:hidden}.heading{display:flex;justify-content:space-between;align-items:center;gap:8px;font-weight:750;color:var(--accent)}.hint{color:var(--muted);font-size:clamp(12px,3.2vmin,14px);font-weight:500}.caption{margin-top:auto;color:var(--muted);font-size:clamp(12px,3.2vmin,14px)}.row{display:flex;gap:clamp(5px,1.5vmin,12px);align-items:center}.tile{padding:clamp(6px,1.8vmin,13px);border:1px solid var(--line);border-radius:9px;background:var(--bg);text-align:center;min-width:0}.arrow{color:var(--accent);font-weight:800}.stage [data-on]{transition:background .3s,border-color .3s,opacity .3s,transform .3s}.stage .on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,var(--surface));color:var(--accent)}.nav{flex:1;display:flex;align-items:center;justify-content:center;gap:clamp(6px,2vmin,20px)}.page-a,.page-b{width:30%;max-width:150px;padding:15px 5px;font-weight:750}.track{width:25%;height:8px;background:var(--line);border-radius:99px;position:relative}.track i{position:absolute;left:0;top:-7px;width:23px;height:23px;border-radius:50%;background:var(--accent-3);transition:left .4s,background .3s}.stage[data-step="1"] .track i{left:calc(100% - 23px)}.stage[data-step="2"] .track i{left:0;background:var(--accent)}.stage[data-step="1"] .page-b,.stage[data-step="2"] .page-a{border-color:var(--accent)}.status{text-align:center;color:var(--accent-2);font-weight:700}.stage small,.stage button,.stage .cards b,.stage .phase b,.stage .pair b,.stage .tree-mini b{font-size:clamp(12px,3.2vmin,14px)!important}
js
const stage=document.querySelector(".stage"),label=document.getElementById("nav-status"),messages=["A → B: network","B received and stored","B → A: cache hit"];let step=0;function tick(){stage.dataset.step=String(step);label.textContent=messages[step];step=(step+1)%3}tick();let timer=setInterval(tick,980);stage.addEventListener("pointerdown",()=>{clearInterval(timer);tick()})

Next.js 16.2의 experimental.cachedNavigations는 초기 HTML과 내비게이션에서 받은 정적·동적 Server Components 데이터를 캐시합니다. 같은 곳을 다시 방문하면 저장된 데이터를 사용할 수 있습니다.

이 기능은 실험 단계이며 Cache Components 설정이 필요합니다. 개인정보나 빠르게 바뀌는 데이터의 재사용 범위를 검토해야 합니다.

언제 쓰나

Next.js 16.2에서 반복 이동의 체감 속도를 시험할 때, 캐시 정확성을 함께 검증합니다.

페이지로 열기 ↗