브라우저 렌더링 과정과 DOM, CSSOM, layout, paint

  • 브라우저가 웹사이트를 렌더링하는 과정을 정리한다.
  • 브라우저가 웹 사이트를 렌더링하는 과정에서는 DOM과 CSSOM이 생성되는데 각각 다음과 같은 의미를 지닌다.

DOM(Document Object Model)은 XML이나 HTML 문서에 접근하기 위한 인터페이스이다.

🍻 DOM은 자바스크립트로 접근하여 수정될 수 있다.


CSSOM(CSS Object Model)은 CSS 객체 모델로 자바스크립트가 CSS를 동적으로 조작할 수 있게 해준다. 
🍎 HTML 대신 CSS가 대상인 DOM이라고 할 수있다.

이제 실제 브라우저가 렌더링되는 과정을 살펴보면 다음과 같다.

1. DOM / CSSOM 트리

  • DOM 트리가 만들어지기 위해서 일단 브라우저가 HTML의 바이트 코드를 가져와 지정된 인코딩 방법에 따라 문자로 변경한다.
  • 이 문자를 브라우저가 각각 의미를 갖는 토큰으로 변환한다.
  • 이 토큰을 노드로 전환하고(lexing), 이 노드들로 객체 모델(트리 구조)를 형성한다.

2. CSSOM 역시 위와 같은 과정을 통해서 트리 형태의 CSSOM으로 만들어진다.

3. 브라우저 렌더링 (Render Tree)

  • 위에서 만들어진 DOM 트리와 CSSOM 트리가 결합되어 Render Tree가 생성된다.
  • Render Tree는 페이지를 렌더링 하는데 필요한 노드만을 가진다.
  • ☕ 예를 들면, display: none 속성의 노드는 렌더 트리에 포함되지 않는다.
  • 그리고 Layout(모든 객체들의 정확한 위치와 크기)을 계산한 뒤, 이를 기반으로 실제 렌더 트리의 각 노드를 픽셀로 변환해 화면에 출력한다(Paint)

4.  그 뒤엔 특정 이벤트가 일어나 Layout을 다시 계산(reflow)하거나 스타일이 변경되었을 때는 repaint 작업이 일어난다.

  • 만약 이미지의 크기를 설정해주지 않았다면, 네트워크 통신을 통해 이미지를 가져올 경우 이미지를 가져온 뒤 이미지의 크기를 알게되기에 reflow 작업이 일어난다.
  • 브라우저가 화면을 그리는 작업(paint)는 메모리를 많이 사용하는 비싼 작업이기에, 적게 발생하는 것이 좋고 최적화를 하는 것이 성능 향상을 위해서 중요하다.
  • CPU 메인 쓰레드를 사용하는 것 보다 GPU를 사용하는 것이 성능 향상에 도움이 될 수 있는데, video, canvas 태그를 사용하거나 opacity, 3D transform, will-change와 같은 css 속성을 사용하면 GPU를 이용하여 paint를 할 수 있다.

 

 

https://developer.mozilla.org/ko/docs/Web/API/Document_Object_Model/Introduction

 

DOM 소개 - Web API | MDN

이 문서는 DOM에 대한 개념을 간략하게 소개하는 문서이다: DOM 이 무엇이며, 그것이 어떻게 HTML, XML 문서들을 위한 구조를 제공하는지, 어떻게 DOM 에 접근하는지, API 가 어떻게 사용되는지에 대한

developer.mozilla.org

https://developer.mozilla.org/ko/docs/Web/API/CSS_Object_Model

 

CSS 객체 모델 (CSSOM) - Web API | MDN

CSS Object Model은 JavaScript에서 CSS를 조작할 수 있는 API 집합입니다. HTML 대신 CSS가 대상인 DOM이라고 생각할 수 있으며, 사용자가 CSS 스타일을 동적으로 읽고 수정할 수 있는 방법입니다.

developer.mozilla.org

https://developer.mozilla.org/ko/docs/Web/Performance/How_browsers_work

 

웹페이지를 표시한다는 것: 브라우저는 어떻게 동작하는가 - Web Performance | MDN

사용자는 로드가 빠르고 상호작용이 원활한 컨텐츠로 이루어진 웹 경험을 원합니다. 따라서 개발자는 이 두 가지 목표를 달성하기 위해서 부단히 노력해야합니다.

developer.mozilla.org

 

'기타' 카테고리의 다른 글

REST API 란?  (0) 2023.04.24
HTML 시맨틱 태그 알아보기 (Semantics)  (0) 2023.04.22
Process Scheduling이란?  (0) 2023.04.14
가비지 컬렉션 (Garbage Collection)에 대하여  (0) 2023.04.11
WebSocket에 대해서 (& Socket.IO)  (0) 2023.03.31