- Jampack은 Static Site Generator 출력물을 받아 사용자 경험과 Core Web Vitals 점수를 최적화하는 사후 처리 도구이며, 번들러나 프레임워크가 아님
- HTML의
<img>와 <picture>를 반응형 이미지로 바꾸고, WebP·AVIF 같은 형식, srcset, sizes, width, height, loading="lazy", decoding="async" 등을 자동으로 추가함
- CDN 이미지는 URL 파라미터 기반
srcset으로 반응형 처리할 수 있고, 외부 이미지는 _jampack 아래로 다운로드해 최적화된 로컬 이미지로 바꿀 수 있음
- Above-the-fold 자산은 높은 우선순위로 처리하고 작은 이미지는 HTML에 인라인하며, below-the-fold 이미지와 iframe은 지연 로딩함
- 정적 사이트 빌드 결과 폴더에
npx @divriots/jampack./dist를 실행하는 방식으로 적용하며, CSS·JS·HTML·SVG·이미지 압축까지 2차 패스에서 수행함
Jampack의 역할
- Jampack은 Static Site Generator, 즉 SSG가 만든 결과물을 입력으로 받아 정적 웹사이트를 최적화함
- 목표는 사용자 경험과 Core Web Vitals 점수를 개선하는 것임
- README는 Jampack을 “번들러도 아니고 프레임워크도 아님”이라고 구분함
- 소개 글은 Read the introduction blog post에서 제공됨
이미지 최적화
- 일반
<img>는 반응형 이미지로 변환됨
- 원본
src에 대해 WebP 파일을 만들고 srcset을 추가함
sizes="100vw", loading="lazy", decoding="async", width, height 같은 속성이 추가됨
<picture> 요소는 여러 이미지 형식을 포함하는 반응형 구조로 바뀜
- AVIF용
<source type="image/avif">가 추가됨
- WebP용
<source type="image/webp">가 추가됨
- 원본
<img>에도 srcset, sizes, loading, decoding, width, height가 들어감
- 이미지 최적화 기능은
optimize-images 문서로 이어지지만, README의 해당 링크는 상대 경로임
CDN 및 외부 이미지 처리
- CDN 이미지는 원격 URL을 유지하면서 반응형
srcset을 추가할 수 있음
- 예시는 Unsplash 이미지 URL에
w, fit=min, auto=format 파라미터를 붙여 여러 폭의 후보를 만듦
- 원본 이미지에도
loading="lazy", decoding="async", sizes="100vw"가 추가됨
- 외부 이미지는 다운로드한 뒤 최적화된 로컬 파일로 바뀔 수 있음
- 예시는 외부 Unsplash 이미지를
_jampack/ab99b9d280ce4cf7cfc810b59f3a7739.jpg.webp 같은 경로로 바꿈
- 변환된 이미지에는
width, height, srcset, sizes, loading, decoding이 포함됨
Above-the-fold와 CSS·링크 최적화
- Jampack은 above-the-fold 자산을 별도로 최적화함
- 이미지는 더 높은 우선순위로 로드됨
- 작은 이미지는 HTML에 임베드됨
- below-the-fold 자산은 지연 로딩됨
- 이미지와 iframe이 lazy load 대상임
- Critical CSS는 HTML에 인라인됨
- 목적은 스타일시트 다운로드와 파싱 중 발생할 수 있는 FOUC를 피하는 것임
- 나머지 CSS는 지연 로딩됨
- 링크 프리페치는 향후 페이지 이동을 빠르게 하기 위한 기능임
- quicklink를 사용해 링크가 viewport에 들어올 때 동적으로 처리할 수 있음
자산 압축과 실행 방법
- Jampack은 2차 패스에서 건드리지 않은 모든 자산을 압축하며, 같은 이름과 같은 형식을 유지함
- 확장자별 압축 도구는 다음과 같음
- 정적 웹사이트가
dist 폴더에 있을 때 다음 명령으로 실행함
npx @divriots/jampack ./dist
사용 사례와 이름의 의미