랜더링 엔진 동작 과정 & 사용자 관점
브라우저가 페이지를 요청하고 해당 페이지를 띄우는 랜더링 동작 과정에 대해 간략히 정리해보려 한다.
랜더링 동작 과정
- 다운로드
- 페이지 파일을 다운로드 한다.
- 랜더링 엔진이 시작되는 부분은 아니다.
- 파싱
- 랜더링 엔진의 시작지점
- 다운로드한 파일(보통 8KB 단위)을 해석하며,
DOM
,CSSOM
트리를 구성한다. - 각 태그에서 리소스가 필요할 경우 다운로드 한다.
- 스타일
DOM
,CSSOM
트리를 조합하여 스타일을 매칭시켜 렌더 트리를 구성
- 레이아웃
- root부터 노드를 순회하며 각 노드의 정확한 위치와 크기를 계산
- 계산된 값을 픽셀로 하여 렌더트리에 반영
- 페인트
- 렌더트리의 각 노드를 화면상의 실제 픽셀로 변환
- 변환된 결과를 개별 레이어로 관리
- 합성, 랜더
- 각 레이어를 합성하여 스크린 업데이트
- 화면 확인 가능
- CPU가 애니메이션을 처리하기 위해 GPU와 통신
- 레이아웃(리플로우)
DOM
의 추가/삭제 및 기하적인 영향을 주는 CSS 속성값 변경 시DOM
,CSSOM
트리 변경 시 3~6 과정을 다시 진행
- 리페인트
- 기하학적 영향을 주지 않는 CSS 속성값 변경시
- 3~6 과정에서 레이아웃을 스킵
- 부하가 적다.
번외
DOMContentLoaded
이벤트: HTML과 CSS 파싱이 끝나는 시점load
이벤트: HTML 상에 필요한 모든 리소스가 로드된 시점
사용자 기준 화면 시점
- FP(First Paint): 화면에 무언가가 처음으로 그려지는 시점
- FCP(First Contentful Paint): 텍스트나 이미지가 출력되기 시작하는 시점
- FMP(First Meaningful Paint): 사용자에게 의미 있는 컨텐츠가 그려지기 시작하는 시점
- TTI(Time to Interactive): js 초기 실행이 완료되어 사용자가 행동을 취할 수 있는 시점
랜더링 차단 리소스
CSS, Script
참고 자료 링크
좋은 글 감사드립니다.