브라우저의 렌더링이란 브라우저가 어떻게 HTML
, CSS
, JavaScript
를 해석해서 화면에 출력하는 것을 의미한다.
파싱
: 구문분석, 문자열을 토큰단위로 분해하는 것을 의미한다.토큰
: 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소렌더링
: HTML
, CSS
, JavaScript
을 파싱해서 브라우저에 시각적으로 나타낸 것리소스
: HTML
, CSS
, JavaScript
, Image
등의 파일들을 의미HTML
로 DOM
, CSS
로 CSSOM
을 생성한다.DOM
과 CSSOM
을 결합하여 렌더트리
를 생성한다.JavaScript
로 AST
를 생성한다.AST
를 바이트코드로 변환한 후 DOM
과 CSSOM
의 변화를 적용하고 렌더트리
를 생성한다.렌더트리
를 기반으로 레이아웃을 결정하고, 화면에 페인팅
한다.리소스로 받아온 HTML은 순수한 텍스트이다.
순수한 텍스트는 브라우저가 이해할 수 없기 때문에 DOM으로 변환하는 것이다.
이 때 DOM으로 변환하는 과정을 파싱이라고 하며, DOM은 자료구조(객체)이다.
<mata>
의 charset
의 값을 기준으로 인코딩 방식을 정함DOM
이라고 부름DOM을 생성하던 도중에 <link>
나 <style>
을 만나면 DOM생성을 중지하고 CSS를 파싱한다.
CSSOM 생성과정은 DOM과 비슷하게 진행된다. ( 생략 )
DOM과 CSSOM을 결합하여 렌더 트리를 생성한다.
렌더 트리를 이용해서 레이아웃을 계산하고, 화면에 그리는 페인팅이 처리된다.
이후 DOM이나 CSSOM이 JavaScript
에 의해서 변환되는 경우에 레이아웃계산과 페인팅이 재실행된다.
DOM생성중에 <script src="">
를 만나면 일시중지하고 JavaScript
코드로 AST
를 생성한다.
AST
생성 순서AST
생성함.JavaScript로드와 HTML파싱이 같이 이루어지며, JavaScript실행시에만 HTML파싱이 일시중지된다.
JavaScript로드와 HTML파싱이 같이 이루어지며, HTML파싱이 모두 끝나고 JavaScript실행이 시작된다.
<script async src="app.js">
<script defer src="app.js">