요소의 위치나 크기 계산이 다시 일어나는 과정
- 예시:
- DOM에 새로운 요소 추가
- 기존 요소의
width,height,padding,margin,display,position변경- 윈도우 크기 조절
- 브라우저는 레이아웃 전체나 일부를 다시 계산
- 매우 무겁고 성능에 큰 영향
👉 예시 코드:
element.style.width = "500px"; // → Reflow 발생
위치나 크기는 그대로인데 시각적 속성만 바뀌는 것
- 예시:
color,background-color,visibility,border-color변경- Reflow 없이도 발생 가능
- 성능 부담은 덜하지만, 빈번하면 느려짐
👉 예시 코드:
element.style.backgroundColor = "red"; // → Repaint만 발생
| 작업 | Reflow | Repaint |
|---|---|---|
width, height, margin 변경 | ✅ | ✅ |
color, background-color 변경 | ❌ | ✅ |
| DOM 추가/삭제 | ✅ | ✅ |
| 텍스트 내용 변경 | ✅ | ✅ |
transform 또는 opacity 변경 | ❌ | ✅ (GPU 가속 가능) |
documentFragment 사용classList.add()로 CSS 클래스 변경만 하도록 유도requestAnimationFrame으로 애니메이션 최적화Reflow는 레이아웃 계산, Repaint는 시각적 속성 변경. Reflow가 훨씬 무겁고 성능에 치명적이다.