브라우저 렌더링 과정

hong·2022년 12월 20일
0

🔎 브라우저

  • 사용자가 선택한 페이지, 이미지, 비디오 등의 컨텐츠를 서버로부터 받아와서 유저에게 보여준다.
  • 받아온 자원들을 렌더링 과정을 통해 사용자에게 보여준다.
  • Chrome, Safari, Firefox, Internet Explorer 등

🔎 렌더링 엔진

  • 대부분의 브라우저는 렌더링을 수행하는 렌더링 엔진(Rendering Engine)을 가지고 있다.
    ex) 웹킷(Webkit), 게코(Gecko)
  • 렌더링 엔진이 HTML, CSS, JavaScript로 렌더링할 때, CRP(Critical Rendering Path)라는 프로세스를 사용하며 렌더링 과정이 이루어진다.

🔎 브라우저 렌더링 과정

  1. Parsing    HTML 파일과 CSS파일을 각각 파싱해서 Tree를 만든다.
    HTML 파싱 → DOM(Document Object Model) Tree 구축
    CSS 파싱 → CSSOM(CSS Object Model) Tree 구축
  2. Style    두 Tree를 결합하여 Rendering Tree를 만든다.
  3. Layout    Rendering Tree에서 각 노드의 위치와 크기를 계산한다.
  4. Paint    계산된 값을 이용해 각 노드를 화면상의 실제 픽셀로 변환하고, 레이어를 만든다.
  5. Composite    레이어를 합성하여 실제 화면에 나타낸다.

     Parsing

  • 브라우저가 페이지를 렌더링하기 위해 받아온 HTML 파일 해석
  • HTML 파일을 해석하여 DOM(Document Object Model) Tree 구성
  • 파싱 중 HTML에 CSS가 포함되어 있다면 CSSOM(CSS Object Model) Tree 구성

     Style

  • Parsing 단계에서 생성된 DOM Tree와 CSSOM Tree를 매칭시켜서 Render Tree 구성
  • 이 Render Tree는 실제로 화면에 그려질 Tree
    ex) visibility: hidden 요소가 공간 차지하고, 보이지 않음 → Render Tree 포함
          display:none 요소가 공간 차지하지 않고, 보이지 않음 → Render Tree 제외

     Layout

  • Render Tree를 화면에 어떻게 배치해야 할 것인지 노드의 정확한 위치와 크기 계산
  • 루트 노드부터 순회하면서 노드의 정확한 크기와 위치를 계산하고 Render Tree에 반영
  • 만약 크기의 값을 %로 지정했다면, 해당 단계에서 %를 픽셀 단위로 변환하는 계산 수행

     Paint

  • Layout 단계에서 계산된 값을 이용해 Render Tree의 각 노드를 화면상의 실제 픽셀로 변환
  • 픽셀로 변환된 결과는 하나의 레이어가 아니라 여러 개의 레이어로 관리
  • 디자인이 복잡할수록 해당 단계 수행 시간 증가
    ex) 단색 배경의 경우 시간과 작업이 적게 필요. 그림자 효과는 시간과 작업이 더 많이 필요

     Composite

  • Paint 단계에서 생성된 레이어를 합성하여 실제 화면에 나타냄
  • 우리가 화면에서 보는 웹 페이지

References:
https://tecoble.techcourse.co.kr/post/2021-10-24-browser-rendering/
https://github.com/baeharam/Must-Know-About-Frontend/blob/main/Notes/frontend/browser-rendering.md

0개의 댓글