앞서 성능 최적화는 크게 로딩 최적화와 렌더링 최적화로 나뉜다고 했다. 진행하고 있는 프로젝트에서 홈페이지의 성능을 분석하고 어떤 것부터 해야 하는지 우선순위를 정하자.
Enable text compression
(6,567 KiB)
HTML, CSS, JS 등의 텍스트 리소스를 Gzip/Brotli 압축 안 한 상태
Minify JavaScript
(3,364 KiB)
JS 코드에 불필요한 공백, 주석 포함
Reduce unused JavaScript
(3,765 KiB)
실제 사용하지 않는 JS 코드도 함께 다운로드됨
Preconnect to required origins
(450ms)
외부 리소스 도메인 연결 시 지연 발생
<link rel="preconnect" href="https://example.com" />
로 DNS/TCP 핸드셰이크 미리 수행Serve images in next-gen formats
(541 KiB)
JPEG/PNG보다 용량 큰 이미지 사용
Properly size images
(656 KiB)
너무 큰 이미지를 불필요하게 사용
<img width="300" height="300" />
같이 이미지 사이즈 명시 + 리사이징Eliminate render-blocking resources
(690ms)
CSS/JS가 초기 렌더링을 막고 있음
Avoid serving legacy JavaScript to modern browsers
(39 KiB)
오래된 브라우저용 JS까지 함께 제공
Minimize main-thread work
(2.7s)
초기 렌더링 중 JS parsing, layout 등으로 메인 쓰레드가 오래 점유됨
Page prevented back/forward cache restoration
(1 failure)
뒤로가기 캐시(bfcache)가 작동 안 됨. 사용자는 항상 새로 로딩하게 됨
<Link>
적극 활용Gzip/Brotli 압축 활성화 (Enable text compression)
JS 번들 크기 최소화 (Minify + Reduce unused JS)
이미지 최적화 (WebP 변환, 리사이징)
preconnect, async, font-display 등 연결 & 블로킹 자원 제거
메인 쓰레드 작업 분리 (Minimize main-thread work)
컴포넌트 리렌더링 줄이기 (memo, useMemo, 상태 구조 정리)
back/forward cache 활용 가능하게 수정