브라우저란 우리가 흔히 인터넷에 접속할때 사용하는 IE, Chrome, Firefox등을 말한다. 일반적으로 웹 브라우저는 다음과 같은 기능을 수행한다.
렌더링의 기본적인 동작 과정은 다음과 같다.
렌더링 과정 중 가장 중요한 부분이 Parsing 부분인데, 브라우저는 HTML이나 CSS를 이해할 수 없기 때문에 브라우저가 이해할 수 있도록 변환하는 과정이 필요하다. 즉, 파싱은 서버로부터 전송받은 문서의 문자열을 브라우저가 이해할 수 있는 구조로 변환하는 과정이라고 할 수 있다
HTML Parsing
렌더링 엔진이 HTML 문서를 수신받으면, HTML 파서는 이를 위에서부터 읽어 내려가며 파싱을 진행하고, 그 결과물로 DOM 트리를 생성한다.
CSS Parsing
CSS 문서를 파싱하여 CSSOM 트리를 생성한다. CSS는 렌더링할때 반드시 필요한 리소스이기 때문에 빠르게 CSS를 로드하는게 좋고, 그래서 head 태그 안에 작성한다.
JS Parsing
파싱 과정에서 script 태그를 만나면 일단 파싱을 중단하고 script를 읽는다. 그게 완료되면 중단되었던 파싱을 다시 시작한다. script 태그가 body 태그 중간에 위치할 경우 HTML 파싱을 하는 도중에 갑자기 JS 파일을 읽게 되므로 오류 발생 위험이 있다. 그래서 head 태그 안에 작성하거나, body태그 최하단에 작성한다.
렌더 트리란 실제 화면에 표현되는 노드들로만 구성된 트리를 말한다. 화면에 표현된다는 말은 눈에 보이는것이 아닌 화면상에서 공간을 차지하는지를 말한다.
렌더트리의 노드를 화면에 배치하는 과정을 레이아웃이라고 한다.
렌더트리 생성이 끝나면 웹페이지 화면 안에서 렌더트리에 있는 각 노드의 위치와 크기, 너비, 높이 등을 계산하고 화면에 배치하는 레이아웃 과정이 실행된다.
이 과정에서 뷰포트 내에서 생성된 render tree의 각 노드들이 스크린 상의 어느 공간에 위치해야할지가 결정된다.
레이아웃 과정에서 계산된 정보들을 바탕으로 각 노드들을 화면에 그려주는 과정이다.
렌더 트리의 각 노드를 화면의 실제 픽셀로 나타낼 때 Painting메서드가 호출된다. Painting 과정 후 브라우저 화면에 UI가 나타나게 된다. 브라우저 성능 개선을 위해 각 노드를 레이어별로 나눠서 준비한다. 그리고 변경되는 요소가 있을 경우 그 레이어만 업데이트한다.