Fundamentals/Browser Mechanics
Reflow & Repaint
sod0l
2024. 10. 2. 17:41
Reflow와 Repaint는 웹 페이지의 렌더링 과정에서 발생하는 두 가지 중요한 개념이다.
이 개념을 이해하는 것은 성능 최적화에 큰 도움이 된다.
Reflow (리플로우)
- 정의: Reflow는 DOM 요소의 크기, 위치, 또는 구조가 변경될 때 발생한다. 예를 들어, 요소의 크기를 변경하거나, 새로운 요소를 추가하거나, CSS 스타일을 수정할 때 발생한다.
- 예시:
- 브라우저에서 텍스트의 폰트 크기를 변경할 때
- 요소의 `margin`, `padding`, `border` 등을 수정할 때
- 화면 크기가 변경될 때 (예: 창 크기 조절)
- 중요성: Reflow가 발생하면 브라우저는 레이아웃을 다시 계산해야 하므로 CPU와 메모리 자원을 소모하게 된다. 따라서 너무 많은 Reflow는 성능 저하를 일으킬 수 있다.
Repain (리페인트)
- 정의: Reflow가 발생하면 브라우저는 레이아웃을 다시 계산해야 하므로 CPU와 메모리 자원을 소모하게 된다. 따라서 너무 많은 Reflow는 성능 저하를 일으킬 수 있다.
- 예시:
- 배경색을 변경할 때
- 글자의 색상을 바꿀 때
- CSS 애니메이션으로 색상이 변화할 때
- 중요성: Repaint는 Reflow보다 성능에 미치는 영향이 적다. 하지만 너무 많은 Repaint도 성능에 영향을 미칠 수 있으므로 주의해야 한다.
요약
- Reflow: DOM 요소의 구조가 변경되어 레이아웃을 다시 계산해야 할 때 발생한다. 성능에 더 큰 영향을 미친다.
- Repaint: 요소의 스타일이 변경되지만 레이아웃이 변하지 않을 때 발생한다. 성능에 미치는 영향은 상대적으로 적다.
성능 최적화 팁
- 배치 작업: DOM에 여러 번 접근하기보다는 변경할 내용을 한 번에 적용한다.
- CSS 클래스 변경: 스타일을 직접 수정하기보다는 CSS 클래스를 추가/삭제하는 방식으로 변경한다.
- 오프스크린 요소 사용: 변경이 필요한 요소를 화면 밖으로 이동시켜서 Reflow를 최소화한다.