Render Tree, Reflow, Repaint

승민·2025년 3월 26일
0

면접 대비

목록 보기
2/31

브라우저의 단계별 작업 과정

  1. HTML 마크업을 처리하고 DOM tree 빌드
  2. Link 또는 style Tag를 만나면, CSS 스타일링 처리하고 CSSOM tree 빌드
  3. DOM tree와 CSSOM tree 결합되어 Render tree 만든다.
  4. Render tree에서 “레이아웃 = 리플로우" 실행하여 각 노드의 위치 계산
  5. 화면에 개별 노드 “리페인트 = 래스터화” 실행하여 그리기

Render Tree

브라우저는 HTML과 CSS 파일을 파싱하여 생선된 DOM Tree와 CSSOM Tree, 두 개의 트리를 결합한 것을 Render Tree라고합니다.
Render Tree
[출처: 자바스크립트 Deep Dive]

DOM과 Render Tree는 항상 일치하진 않습니다. Render Tree는 문서의 시각적 표현을 담당하기 때문에 화면에 렌더링되지 않는 display: none 속성이 적용된 요소나 <head> 내부의 태그들은 Render Tree에 포함되지 않습니다.

Reflow와 Repaint

Reflow와 Repaint
웹 페이지는 정적인 상태로만 존재하는 것이 아니라, 개발자의 코드나 사용자의 행동에 따라 DOM의 변경이 발생니다.
이런 과정에서 브라우저는 변경 사항을 반영하기 위해 발생하는 과정이 Reflow와 Repaint입니다.

Reflow

  • 요소의 위치나 크기와 같은 레이아웃 정보를 다시 계산하는 과정
  • width, height, flex, font-size 등의 변경이 발생하면 Reflow 발생
  • CPU를 사용
  • Reflow는 자신의 자식 DOM 전체에 영향을 줄 수 있어 성능에 큰 부담
  • Reflow는 발생 시 Repaint도 동반하므로, 브라우저 성능 최적화를 위해 가능한 한 Reflow 발생을 줄이는 것이 중요

Reflow를 유발하는 작업

  • 요소의 크기 또는 위치 변경 (width, height, margin, padding, position, top, left 등)
  • 요소의 추가 또는 삭제
  • offsetHeight, offsetWidth, getBoundingClientRect() 등의 속성 접근
  • display: none 적용 또는 해제
  • 브라우저 창 크기 변경
  • Reflow 관련 객체
    Reflow 관련 객체
    출처

reflow 최소화

  1. fragment 기법을 사용해 dom 업데이트를 한번에 처리 (batch update)
  2. 레이아웃 변경을 최소화하도록 css 작성
  3. css 애니메이션 최적화
  4. css will-change 속성 사용 -> 자주 사용하면 메모리 낭비 발생

Repaint

  • Repaint는 요소의 스타일(색상, 배경 등)이 변경될 때 발생
  • GPU를 사용
  • Reflow보다 비용이 적지만, 불필요한 Repaint가 많아지면 렌더링 성능에 영향을 줄 수 있다.

Repaint를 유발하는 작업

  • color, border-color, background 등의 속성 변경
  • visibility 속성 변경

요약

Reflow는 요소의 위치나 크기와 같은 레이아웃 정보를 다시 계산하는 과정이다.
Reflow는 자신의 자식 요소의 렌더링도 발생해 무거운 작업

Repaint는 요소의 스타일(색상, 배경 등)이 변경될 때 발생

참고 자료

Reflow, Repaint을 알아보자!
[자바스크립트] 브라우저 렌더링
Render Tree 구성, Reflow, Paint(Repaint)

0개의 댓글