Astro 실험적 증분 정적 빌드

Experimental Astro incremental static builds

Astro 7.2는 코드와 데이터가 모두 그대로인 정적 경로의 HTML 생성을 건너뜁니다.

···
html
<section class="stage"><div class="heading">INCREMENTAL BUILD <span class="hint">code hash + data key</span></div><div class="build-grid"><div class="build-page"><b>PAGE A</b><span>same</span></div><div class="build-page"><b>PAGE B</b><span>changed</span></div><div class="build-page"><b>PAGE C</b><span>same</span></div></div><div class="build-status" id="build-status">Compare previous build keys</div><div class="caption">Only changed paths need another render</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)}.build-grid{flex:1;display:flex;align-items:stretch;justify-content:center;gap:clamp(5px,2vmin,15px);min-height:70px}.build-page{flex:1;max-width:150px;border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(5px,1.7vmin,10px);display:flex;flex-direction:column;justify-content:space-between;text-align:center;transition:background .3s,border-color .3s}.build-page b{font-size:clamp(12px,3vmin,15px)}.build-page span{font-size:clamp(12px,3vmin,14px);color:var(--muted)}.stage[data-step="1"] .build-page:not(:nth-child(2)),.stage[data-step="2"] .build-page:not(:nth-child(2)){border-color:var(--accent-2)}.stage[data-step="1"] .build-page:not(:nth-child(2)) span,.stage[data-step="2"] .build-page:not(:nth-child(2)) span{color:var(--accent-2)}.stage[data-step="2"] .build-page:nth-child(2){border-color:var(--accent);background:color-mix(in srgb,var(--accent) 18%,var(--surface))}.build-status{text-align:center;color:var(--accent-2);font-weight:700;font-size:clamp(12px,3vmin,15px)}.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"),status=document.getElementById("build-status"),labels=["Compare previous build keys","A and C: reuse stored HTML","B: render new HTML"];let step=0;function tick(){stage.dataset.step=String(step);status.textContent=labels[step];step=(step+1)%3}tick();const timer=setInterval(tick,1000);stage.addEventListener("pointerdown",()=>{clearInterval(timer);tick()})

Astro 7.2의 실험적 증분 정적 빌드는 getStaticPaths()가 반환한 경로의 cacheKey와 해당 경로의 코드 의존성 해시를 비교합니다. 둘 다 이전 빌드와 같으면 저장된 HTML을 재사용합니다.

이것은 배포 후 요청에서 페이지를 다시 만드는 ISR과 다르게 빌드 시간을 줄이는 기능입니다. 이전 빌드의 cacheDir가 없거나 데이터 키가 바뀌면 다시 렌더하며, 아직 실험 기능입니다.

언제 쓰나

페이지 수가 많고 일부 콘텐츠만 바뀌는 Astro 정적 사이트에서 빌드 시간을 줄이려 할 때 시험합니다.

페이지로 열기 ↗