[JavaScript]브라우저의 렌더링 과정
[ 파싱 & 렌더링 ]
브라우저의 렌더링 과정을 살펴보기 앞서 파싱과 렌더링이 무엇인지 살펴보겠습니다.
★ 파싱 parsing
파싱은 구문분석이라고도 할 수 있습니다.
프로그래밍 언어로 작성된 텍스트 문서를 읽어 들여 실행하기 위해, 이 텍스트 문서의 문자열을 토큰으로 분해하고 토큰에 문법적 의미와 구조를 반영하여 파스 트리를 생성하는 과정을 파싱이라고 합니다.
여기서 토큰(token)은 문법적 의미를 갖는 코드의 최소 단위입니다.
★ 렌더링 rendering
렌더링은 HTML, CSS, JavaScript 로 작성된 문서를 파싱하여 브라우저에 시각적으로 출력하는 것입니다.
[ 브라우저의 렌더링 과정 ]
1. 요청과 응답
렌더링에 필요한 리소스(html, css, js, img, 폰트 파일 등)는 모두 서버에 존재하므로, 브라우저는 렌더링에 필요한 리소스를 서버에 요청하고 서버로부터 그 응답값을 받습니다.
2. DOM tree 생성 + CSSOM tree 생성 => Render tree 생성
브라우저의 렌더링 엔진은 서버로부터 응답받은 HTML과 CSS를 파싱하여 각각 DOM과 CSSOM을 생성합니다.
이후, DOM과 CSSOM을 결합하여 Render 트리를 생성합니다.
3. JavaScript 실행
브라우저의 자바스크립트 엔진은 서버로부터 응답받은 JavaScript를 파싱하여 AST를 생성하고 바이트코드로 변환하여 실행(execute)합니다.
이때 자바스크립트는 DOM API를 통해 DOM과 CSSOM을 변경할 수 있으며 변경된 DOM과 CSSOM은 다시 렌더 트리로 결합됩니다.
브라우저의 렌더링 엔진은 HTML을 파싱하는 도중에 외부 리소스를 로드하는 태그(<link>, <script>, <img> 등)을 만나면 HTML의 파싱을 일시 중단하고 해당 리소스 파일을 서버로 요청하여 파싱이 완료(CSSOM 생성 또는 JS 실행)되면 파싱 중단 지점부터 HTML 파싱을 재개합니다.
4. Layout
브라우저의 렌더링 엔진은 렌더 트리를 기반으로 HTML 요소(렌더 트리 노드)의 레이아웃(위치와 크기)을 계산(결정)합니다.
5. Paint
브라우저의 렌더링 엔진은 브라우저 화면에 HTML 요소를 페인팅합니다.