728x90

브라우저가 하는일

  • 웹 브라우저는 입력으로 들어온 HTML,JS,CSS를 읽어 웹페이지를 보여준다.
  • 이때 읽은 3개의 요소를 이용하여 하나의 웹페이지를 구성하고 보여주기 위해서 브라우저에서는 다음의 과정을 거친다.

User Interface

- 주소 표시줄, 뒤로/다음/새로고침 버튼 등 웹페이지를 제외하고 사용자와 상호작용하는 사용자 인터페이스

Rendering Engine

- HTML과 CSS를 파싱하여 요청한 웹 페이지를 표시하는 렌더링 엔진

- 사파리: Webkit, 파이어폭스: Gecko, 크롬: Blink

Browser Engine

- 유저 인터페이스와 렌더링 엔진을 연결하는 브라우저 엔진

Netowrking

- 네트워크 요청을 수행하는 파트

UI Backend

- 체크박스나 버튼과 같은 기본적인 웨젯을 그려주는 파트

Javascript Interpreter

- 자바스크립트 코드를 실행하는 파트 (크롬: V8)

Data Persistence

- LocalStorage,Cookie와 같이 보조기억장치에 데이터를 저장하는 파트


Rendering Engine

임무

  • HTML,CSS,JS, 이미지등 웹 페이지에 포함된 모든 요소들을 화면에 보여준다
  • 업데이트가 필요할 때, 효율적으로 렌더링을 할 수 있도록 트리를 생성한다

렌더링엔진의 동작과정(Critical Rendering Path)

1. DOM /CSSDOM Tree 생성

  • DOM Tree를 생성하기 위한 과정은 다음과 같다.
    • 토큰화 : HTML의 tag를 토큰으로 생성
    • 렉싱 : 토큰을 해당 속성과 규칙을 정의하는 노드객체로 변환
    • DOM Tree생성: 각 노드가 서로 연관성을 가질 수 있도록 트리를 생성
<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <!-- Comment -->
        <h1> h1 tag </h1>
        <span> span tag </span>
        <div>
            <image alt="이미지" src="asdf.jpg"/>
        </div>
    </body>
</html>​

  • CSSOM Tree 생성
    • CSS로 만들어지는 트리
    • CSSOM은 DOM이 화면에 어떻게 표시될지를 알려주는 역할을 한다.
body{
   margin:0;
   padding:0;
   text-align:center;
 }


h1{  
   color:red;  
}

div{  
   width:50%;  
   margin: 0 auto;  
}

span{  
   display: none;  
}

2. Render Tree 생성

   - 렌더링 엔진이 DOM Tree와 CSSOM Tree를 합쳐서 렌더트리를 생성함

   - 화면에 표시되어야 할 모든 노드의 컨텐츠 스타일 정보를 포함하는 트리.

      - display:none, comment 등은 더이상 트리에 포함되지않음

3. Render Tree 배치

   Layout(Reflow)

      - viewport내에서 요소들의 정확한 위치와 크기를 계산

      - 스타일 속성이 계산된다. %나 em같은 단위는 viewport를 기준으로 pixel단위로 변환된다.

   Paint

      - 화면에 실제 픽셀로 그려지도록 변환

 

 


UI 업데이트

- critical rendering의 path를 줄이면 브라우저의 렌더링 시간을 줄일 수 잇다. 

 

UI 업데이트되는 3가지 상황

   1. 다시 Layout이 발생하는 경우

      - 수치를 다시 계산해야할 경우 Layout을 다시 시행한다.

      - 주로 요소의 크기나 위치가 바뀔 때, 혹은 브라우저 창의 크기가 바뀌었을 때 다시 발생. 이후 Paint

   2. Paint부터 다시 발생이 되는 경우

      - 실제 layer의 수치를 변경 시키지 않는 경우 시행한다.

      - 주로 배경 이미지나 텍스트 색상, 그림자 등 레이아웃의 수치를 변화시키지 않는 스타일의 변경이 일어났을 때 발생

   3. layer의 합성만 다시 발생하는 경우

      - layout과 paint를 수행하지 않고 레이어의 합성만 발생하기 때문에 성능상으로 가장 큰 이점을 가진다.

      - layer:

         - layout과정 이후에 브라우저가 필요에 의해 layer를 생성.

         - render tree의 노드객체들은 layer에 포함됨.

         - layer또한 트리의 형태를 가진다. 그리고 rendering engine이 각 layer를 painting 과정에서 그려준 이후 비트맵으로 합성하여 페이지를 완성한다.

 

브라우저별로 같은 CSS여도 layout부터 시행하는지 composite을 하는지 다르기 때문에 www.csstriger.com에서  성능을 확인한다.

'browser' 카테고리의 다른 글

크로스 브라우징  (0) 2021.08.21
자바스크립트 엔진(인터프리터)  (0) 2021.07.14
Local Storage vs Session Storage vs Cookies  (0) 2020.11.24

+ Recent posts