콘텐츠로 이동

Critical Rendering Path

Critical Rendering Path(CRP)는 브라우저가 HTML, CSS, JavaScript를 화면에 픽셀로 변환하는 일련의 단계입니다. 웹 성능 최적화의 핵심 개념으로, DOM, CSSOM, 렌더 트리, 레이아웃, 페인팅 과정을 이해하면 효과적인 최적화가 가능합니다.

  1. HTML 요청: 브라우저가 서버에 HTML을 요청하고, 응답을 받아 DOM 트리로 변환
  2. 외부 자원 요청: HTML 내에서 참조된 CSS, JavaScript, 이미지 등을 추가 요청
  3. DOM과 CSSOM 생성: HTML과 CSS를 각각 분석하여 DOM 트리와 CSSOM을 생성
  4. 렌더 트리 생성: DOM과 CSSOM을 결합하여 렌더 트리 생성
  5. 레이아웃: 각 요소의 위치와 크기를 계산
  6. 페인팅: 최종적으로 화면에 요소들을 그림

DOM은 HTML 페이지의 구조를 나타내는 트리 형태의 데이터 구조입니다.

  • HTML 태그는 시작 태그와 끝 태그를 기준으로 **노드(Node)**로 변환
  • 노드들이 계층적으로 연결되어 DOM 트리를 형성
  • DOM 트리는 점진적으로 형성됨
  • 각 노드는 해당 HTML 요소에 대한 정보를 포함

DOM 트리의 위계를 잘 이해해야 복잡한 HTML 구조를 효율적으로 처리할 수 있습니다.

CSSOM은 CSS 스타일 정보를 기반으로 한 트리입니다.

  • CSS 분석은 HTML과 달리 순차적으로 이루어짐
  • CSS의 규칙들이 상속 및 우선순위를 가지기 때문에 분석 순서와 방식이 중요

CSSOM이 완성되지 않으면 브라우저는 페이지 렌더링을 차단합니다. CSS 규칙이 페이지에 영향을 미칠 수 있기 때문에, 모든 스타일을 분석하고 적용해야만 렌더링이 가능합니다.

CSS 선택자의 성능은 선택자의 구체성에 영향을 받습니다. 구체적인 선택자는 더 많은 계산을 요구합니다.

  • .foo {} → 단순하고 성능 좋음
  • .bar .foo {} → 더 복잡하고 성능에 부정적

가능한 한 덜 구체적인 선택자를 사용하는 것이 성능에 유리합니다.

렌더 트리는 보여지는 콘텐츠만 포함하는 트리입니다.

  • <head> 섹션은 포함되지 않음
  • display: none 스타일이 적용된 요소는 포함되지 않음
  • DOM과 CSSOM을 결합하여 생성
  • 브라우저가 페이지를 화면에 렌더링하기 위해 필요한 정보를 담고 있음

렌더 트리가 생성된 후, 페이지 요소들이 배치될 위치와 크기를 결정하는 단계입니다.

  • 요소의 너비와 높이는 부모 요소 또는 뷰포트 너비에 의존
  • DOM 노드 수가 많으면 레이아웃 시간이 길어짐
  • 스크롤이나 애니메이션에서 jank(버벅임)를 일으킬 수 있음

픽셀을 화면에 그리는 단계입니다.

  • 페이지 로드 시 전체 화면을 그림
  • 이후에는 변경된 영역만 다시 그림 (리페인트)
단계설명최적화 포인트
DOM 생성HTML → 트리 구조DOM 노드 수 최소화
CSSOM 생성CSS → 스타일 트리선택자 구체성 낮추기
렌더 트리DOM + CSSOM 결합불필요한 요소 제거
레이아웃위치/크기 계산레이아웃 트리거 최소화
페인팅픽셀 그리기변경 영역 최소화

CRP를 이해하면 CSS를 <head>에 배치하는 이유, JavaScript를 <body> 끝에 배치하는 이유, will-changetransform을 사용한 최적화가 왜 효과적인지 이해할 수 있습니다.