- HTML 파싱을 통한 DOM 생성
- HTML 파일은 렌더링 엔진의 HTML 파서에 의해 파싱(Parsing)되어 DOM 트리로 변환
- CSS 파싱을 통한 CSSOM 생성
- CSS 파일은 렌더링 엔진의 CSS 파서에 의해 파싱(Parsing)되어 CSSOM 트리로 변환
- DOM & CSSOM 결합
- 렌더 트리 Render Tree 생성
- 레이아웃 계산
- 화면 렌더링
- byteStream으로 전송된 파일을 문자열로 변환
- meta 태그의 charset 속성에 지정된 인코딩 방식을 기준으로 변환
- 문법적 의미를 갖는 코드의 최소 단위인 토큰으로 분해
- 각 토큰으로 기본 구성 요소인 노드Node 생성
- 렌더링 엔진은 서버로부터 전달받은 HTML/CSS 파일 파싱Parsing
- 구성 요소 간의 관계를 반영한 트리 형태의 자료 구조 생성
- CSSOM 생성 시점
- HTML 파싱 과정에서 CSS를 로드하는
link
태그나style
태그를 만나면 서버에 해당 리소스 요청 - CSS 파싱을 통해 CSSOM 생성이 완료되면 파싱이 중단된 시점부터 다시 파싱하며 DOM 생성 재개
- HTML 파싱 과정에서 CSS를 로드하는
- 생성된 DOM과 CSSOM을 결합
- 렌더 트리 생성
- 브라우저 화면에 실제로 렌더링되는 노드만으로 구성
- 렌더링에 관여하지 않는 노드는 포함되지 않는다. (ex. meta 태그, script 태그,
display: none
)
- 렌더 트리를 기반으로 레이아웃 계산
- HTML 요소의 위치와 크기
- 레이아웃 관련 속성: position, width, height, margin, padding
- 계산값을 기반으로 각 요소를 화면상의 실제 픽셀로 변환 & 레이어 생성
- 모든 시각적 요소 포함: HTML 요소를 렌더링하는 순서, 페이지를 구성하는 Layer 등
- 페인트 관련 속성: background, box-shadow, color, border
- 생성한 레이어를 합성하여 실제 화면에 표시
- 레이아웃에 영향을 주는 변경이 발생한 경우 레이아웃 재계산
- 노드 추가/삭제, 요소 크기/위치 변경, 윈도우 리사이징 등
- 렌더 트리에 변경이 생기면 다시 페인트 진행
- GPU
- transform, opacity
- 모던 자바스크립트 딥다이브 38장 브라우저의 렌더링 과정 38.3 - 38.9