본문 바로가기
StyleSheet/CSS

[CSS] CSS 렌더링 성능 최적화 (리플로우와 리페인트)

반응형

이번 포스팅에서는 [CSS 아키텍처 및 성능] 파트의 세부 주제인 브라우저 렌더링 파이프라인과 최적화 팁에 대하여 상세히 알아보겠습니다.

1. 레이아웃 폭탄: 리플로우(Reflow) 최소화

브라우저가 화면을 그리는 과정 중, 요소의 너비, 높이, 위치 등을 다시 계산하는 것을 리플로우(Reflow)라고 합니다. 가장 무겁고 느린 작업입니다.

  • 금지 패턴: Javascript나 CSS :hover를 통해 width, height, margin, top/left 값을 지속적으로 변경하는 애니메이션.
  • 대체재: transform: scale()이나 transform: translate()로 대체하면 리플로우가 발생하지 않습니다.

2. 하드웨어 가속(GPU) 강제 활성화 기법

복잡한 애니메이션을 중앙 처리 장치(CPU) 대신 그래픽 카드(GPU)에 떠넘기면 연산이 비약적으로 부드러워집니다. 요소의 상태 변화를 GPU 전용 레이어로 분리할 수 있습니다.

.smooth-animated-element {
  /* 의도적으로 3D 변환을 선언하여 GPU에게 별도 레이어 처리를 지시 (과거의 핵) */
  transform: translateZ(0); 
  
  /* 최신 CSS 스펙: 브라우저에게 "이 요소는 곧 변할 거야"라고 미리 힌트를 줌 */
  will-change: transform, opacity;
}

단, will-change를 너무 많은 요소에 무분별하게 남발하면 메모리가 고갈되어 오히려 심각한 성능 저하를 초래합니다. 애니메이션이 끝난 직후 JS로 속성을 제거하는 것이 이상적입니다.


지금까지 브라우저의 리플로우를 피하고 GPU 가속을 활용하는 법에 대해 살펴보았습니다. 시각적 화려함 이면에는 반드시 성능을 고려하는 엔지니어링 마인드가 수반되어야 합니다.

반응형