본문 바로가기

Computer Science/Network

<네트워크> 페이지 렌더링 과정

1. 소개

 - 지난 포스팅에서는 페이지 로딩 과정에 대해 알아보았다. 거기서 렌더링을 간단하게 짚어보았는데, 이번 포스팅에서는 그 부분에 대한 과정을 좀 더 자세히 알아보고자 한다.

 

 - 브라우저가 렌더링 하는 과정을 간단하게 미리 언급하자면, 먼저 html과 css를 처리하여 DOM트리와 CSSOM 트리를 빌드한다. 그리고 그 둘을 결합하여 렌더트리(렌더링트리)를 만들고, 각 레이아웃을 실행하여 형태를 계산한다. 마지막으로 그들을 그린다. 이제 이 과정을 세세하게 알아보자.

 

2. 과정

* DOM

 - 다운받은 html을 파싱하며 DOM트리를 만든다.

 

https://developers.google.com/

 

 - html을 파싱하는 것은 다음 일련의 과정을 거친다.

 

 ∙ Conversion : 바이트를 읽고 인코딩하여 문자열로 바꾸는 과정을 의미한다.

 ∙ Tokenizing : tokenizer가 문자열을 고유한 토큰으로 변환한다. 각 토큰은 <html>, <body>, </body> 등을 의미한다.

 ∙ Lexing : lexer가 토큰에 의미를 부여하는 단계이다. 

 ∙ DOM construction : parcer가 위에서 생성된 객체를 트리구조로 만들어낸다.

 

* CSSOM

 - 위에서 파싱 도중 link태그를 만나면 서버에 CSS파일 요청을 보내고, 받은 css파일을 파싱하여 CSSOM 트리를 만든다.

 

 - CSS파싱이 완료되면 HTML파싱이 중단된 부분부터 다시 파싱하여 DOM을 마저 생성한다.

 

https://developers.google.com/

 

* Render Tree

 - DOM과 CSSOM 트리가 생성되고나서 Render Tree(렌더트리 또는 렌더링트리)단계로 넘어온다.

 

https://developers.google.com/

 

 - DOM과 CSSOM은 각각 독립된 트리 모델이다. 하나는 contents를 설명하고, 다른 하나는 스타일 규칙을 설명한다. 렌더트리는 이 둘을 병합하여 페이지에 렌더링할 노드를 기록한다.

 

 - 이 때, 일부 노드들(script 태그, meta, 태그 등은 렌더링된 출력에 반영되지 않으므로 생략된다. 그리고 css에서도 display: none과 같이 화면에 공간도 차지하지 않고 보이지도 않는 노드도 생략된다. visibility : invisible은 공간은 차지하므로 포함된다.

 

* Layout

 - 렌더 트리가 생성되면 레이아웃 단계로 넘어온다. 렌더 트리의 루트부터 시작하여 각 객체의 크기와 위치를 파악하는 단계이다.

 

 - 레이아웃 단계를 통해 %, vw와 같은 상대적인 사이즈들이 픽셀단위로 변환된다.

 

* Paint

 - 레이아웃이 위치와 크기와 관련된 단계였다면 페인트 단계는 실제로 그리는 단계이다. 레이아웃이 완료되면 브라우저는 Paint Setup 및 Paint 이벤트를 발생시킨다.

 

 - 이미 이전 단계에서 사이즈들이 계산되어 있으므로 페인트는 텍스트, 색, 그림자, 이미지 등을 넣는다. 참고로 그림자나 그라데이션과 같이 스타일이 복잡한 것들은 페인트 시간을 길게 만든다.

 

 

3. 리플로우와 리페인트

 - 위에서 렌더링 과정을 살펴 보았는데, 더 짚고 넘어가야하는 것이 있다. 알다시피 어떤 이벤트에 따라 화면이 다시그려지는 것을 우리는 수없이 봐왔다. 이러한 것들에서 레이아웃과 페인트 과정이 반복되어 일어난다. 

 

 - 레이아웃과 페인트 과정이 발생하는 것은 웹 성능 최적화와도 관련이 있으므로 반드시 알아둬야 한다.

 

* Reflow(Layout)

 - 리플로우는 레이아웃의 과정을 의미한다. 만일 우리가 JS로 DOM의 변경을 만들어내면 렌더트리도 다시만들어지는데, 이 때 어쩔 수 없이 리플로우 과정이 일어난다.

 

 - 위 상황외에 요소의 크기나 위치가 변경되면 리플로우가 발생하고 다시 페인트가 발생한다.

 

 - 폰트나 텍스트 내용이 변경되더라도 리플로우부터 다시 발생한다.

 

* Repaint

 - 리플로우가 발생했다고 끝이 아니다. 리플로우가 발생했으면 당연히 페인트 과정도 연달아 일어난다.

 

 - 리페인트만 일어나는 과정도 있다. 만일 레이아웃과는 무관한 색상과 같은 부분이 변경된다면 렌더트리를 재활용할 수 있으며 리페인트만 일어난다. 이 때에는 리플로우보다 가볍게 동작한다.

 

 


참고

 

 

렌더링 트리 생성, 레이아웃 및 페인트  |  Web  |  Google Developers

TODO

developers.google.com

 

 

Constructing the Object Model  |  Web Fundamentals  |  Google Developers

Learn how the browser constructs the DOM and CSSOM trees.

developers.google.com

 

 

브라우저 렌더링 과정 - Reflow Repaint, 그리고 성능 최적화

렌더링이란 HTML, CSS, JavaScript등 개발자가 작성한 문서를 브라우저에서 그래픽 형태로 출력하는 과정을 말합니다. 웹 개발을 하며 브라우저의 렌더링 과정을 정확하게 이해하고 있으면 어떻게 개

boxfoxs.tistory.com

 

 

브라우저 로딩 과정

처음 웹페이지에 접속하면 브라우저는 서버로 요청을 보내 html, css, js 등의 파일을 다운로드 받고 파싱해서 화면에 보여준다. 이러한 브라우저 로딩과정은 다운로드, 파싱, 스타일, 레이아웃, 페

simsimjae.medium.com

 

 

브라우저의 렌더링

HTML 파싱과 DOM 생성 브라우저의 요청에 의해 서버가 응답한 HTML 문서는 문자열로 이루어진 순수 텍스트다. 순수 텍스트인 HTML 문서를 브라우저에 시각적인 픽셀로 렌더링하려면 HTML 문서를 브라

rkdvnfma90.tistory.com