요약하기
HTML를 파싱 후, DOM트리를 구축합니다.
CSS를 파싱 후, CSSOM트리를 구축합니다.
Javascript를 실행합니다.(HTML 중간에 스크립트가 있다면 HTML 파싱이 중단됩니다.)
DOM과 CSSOM을 조합하여 렌더트리를 구축합니다.
뷰포트 기반으로 렌더트리의 각 노드가 가지는 정확한 위치와 크기를 계산합니다. (Layout 단계)
계산한 위치/크기를 기반으로 화면에 그립니다. (Paint 단계)
사진에 나와있듯이 웹 브라우저는 총 7가지로 구성되어있습니다.
1. 사용자 인터페이스 : 주소표시줄, 이전/다음 버튼, 홈버튼, 새로고침/정지 버튼 등 요청한 페이지를 보여주는 창 외에 사용자가 컨트롤 할 수 있는 부분
2. 브라우저 엔진 : 사용자 인터페이스와 렌더링 엔진 사이에 동작을 제어합니다.
3. 렌더링 엔진 : 요청한 URI를 브라우저 엔진에게 받아서 server에게 요청합니다.(통신). server로 부터 URI에 해당하는 데이터(HTML, CSS, JavaScript)를 받아서 파싱한 후 렌더링합니다.(chrome webkit)
4. 통신 : 렌더링 엔진으로부터 HTTP 요청 등을 받아서 네트워크 처리 후 응답을 전달합니다.(OS 단에서 실행)
5. 자바스크립트 해석기 : JavaScript 를 파싱합니다.(chrome V8)
6. 자료 저장소 : 쿠키 등의 자료를 컴퓨터 하드디스크에 저장합니다. (HTML5 부터 Web Database에 저장가능)
7. UI 벡엔드 : render tree를 browser 에 그리는 역할을 담당합니다.
렌더링 엔진에 대하여 더 자세히 알아봅시다.
웹 브라우저마다 렌더링 엔진은 조금씩 다릅니다.
Safari의 Webkit, Firefox의 Gecko, Chrome의 Blink 등이 있습니다.
렌더링 엔진의 목표는 HTML, CSS, JS, 이미지 등 웹 페이지에 포함된 모든 요소들을 화면에 보여주는 것과 업데이트가 필요할 때, 효율적으로 렌더링을 할 수 있도록 자료구조를 생성하는 것입니다.
렌더링 엔진은 다음과 같이 동작합니다.
먼저 사용자가 요청한 웹페이지 문서를 불러오고 Parsing합니다. (DOM Tree, CSSOM Tree 생성 > Render Tree 생성)
Layout : Render Tree에서 각 노드의 위치와 크기를 계산합니다.
Paint : 화면에 그려지도록 변환하는 과정을 거칩니다.
참고자료
https://developer.mozilla.org/ko/docs/Web/Performance/Critical_rendering_path