브라우저 렌더링은 HTML·CSS·JavaScript 파일을 받아 화면에 픽셀로 그리는 과정이다. 이 파이프라인을 이해하면 성능 최적화에 도움이 된다.
렌더링 파이프라인
HTML 파싱 → DOM 트리
CSS 파싱 → CSSOM 트리
↓
Render Tree (표시되는 요소)
↓
Layout (위치·크기 계산)
↓
Paint (픽셀 그리기)
↓
Composite (레이어 합성)
리플로우 vs 리페인트
| 종류 | 원인 | 비용 |
|---|
| 리플로우(Reflow) | 크기·위치 변경 | 높음 (전체 재계산) |
| 리페인트(Repaint) | 색상·투명도 변경 | 중간 |
| Composite only | transform, opacity | 낮음 |
성능 최적화
javascript
// 느린 방법: 리플로우 반복 트리거
for (let i = 0; i < 100; i++) {
element.style.width = element.offsetWidth + 1 + 'px';
}
// 빠른 방법: DOM 읽기/쓰기 배치 처리
const width = element.offsetWidth; // 읽기
for (let i = 0; i < 100; i++) {
element.style.width = (width + i) + 'px'; // 쓰기만
}
// CSS transform은 Composite만 → 가장 빠름
element.style.transform = 'translateX(100px)';
관련 개념
- •DOM — 렌더링의 첫 단계
- •JavaScript — 렌더링을 조작하는 언어
- •React — Virtual DOM으로 리렌더링 최적화
참고문헌
- •Google Developers — Rendering Performance