브라우저 html을 그리기
브라우저 html을 그리는 과정
1. 파싱
- html 파일을 DOM으로 파싱
<link>
,<img>
와 같은 태그를 만나면 리소스를 다운로드<script>
태그를 만나면 DOM 파싱을 중단하고 자바스크립트를 해석
2. 스타일 계산
- CSS 파싱 -> CSSOM 변환 / 정보 추출 -> DOM노드 스타일 결정
3. 레이아웃
- DOM과 CSSOM정보로 렌더 트리 생성
- 화면에 표현되는 정보만 렌더 트리에 담는다.(
display:none
은 담지 않는다.)
info
**렌더 트리(Rander Tree)**란?
브라우저가 html을 분석하여 트리 형태의 구조로 재해석한 것
4. 페인트
- 렌더 트리가 생성되면 페인트 기록이 생성된다.
- 페인트 기록에는 요소가 렌더링하는 순서가 저장
- 렌더 트리에 모인 데이터를 이용하여 각 레이어를 나누고 시각적 부분을 그리는 작업 진행
5. 컴포지팅
- 각각의 레이어를 스크린에 픽셀로 표현(레스터링), 나누었던 레이어들을 합성하여 페이지를 그림.
reflow와 repaint
reflow
- 레이아웃(너비, 높이) 변경 시 영향 받는 모든 노드의 수치를 다시 계산하여 렌더 트리를 재생성하는 작업
repaint
- reflow 과정이 끝난 후 재생성된 렌더 트리를 다시 그리는 작업
- 수치와 상관없이 스타일 변경시 reflow 과정을 생략 후 repaint작업만 수행
note
reflow vs repaint
- 브라우저 html 구조상의 변화 혹은 스타일의 변화가 있을 때,
reflow
,repaint
과정을 거친다. - 렌더링 과정들에서 전 단계의 데이터가 필요