크리티컬 렌더링 패스

GABMIN KIM·2022년 1월 22일
0

JavaScript

목록 보기
6/17
post-thumbnail

브라우저의 렌더링 과정

브라우저가 HTML, CSS, JavaScript를 스크린에 픽셀로 나타내는 과정을 크리티컬 렌더링 패스(Critical Rendering Path)라고 한다. 이 과정을 최적화 함으로써 렌더링 퍼포먼스를 향상 시킬 수 있다.

렌더링 과정

  1. 브라우저는 HTML, CSS, 자바스크립트, 이미지, 폰트 파일 등 렌더링에 필요한 리소스를 요청하고 서버로부터 응답을 받는다.
  2. 브라우저의 렌더링 엔진은 응답 받은 HTML과 CSS를 파싱(Parsing)하여 DOM과 CSSSOM을 생성하고 이들을 결합하여 렌더 트리(Render Tree)를 생성한다.
  3. 브라우저의 자바스크립트 엔진은 응답 받은 자바스크립트를 파싱하여 AST(Abstract Syntax Tree)를 생성하고 바이트코드로 변환하여 실행한다. 이때 자바스크립트는 DOM API를 통해 DOM이나 CSSOM을 변경할 수 있다. 변경된 DOM과 CSSOM은 다시 렌더 트리로 결합된다.

HTML, CSS 파싱과 DOM, CSSOM 생성

  1. 서버는 요청시 바이트(2진수) 로 저장된 HTML파일을 응답한다.
  2. 응답된 바이트 형태의 HTML문서는 meta 태그의 Charset 어트리뷰트에 의해 지정된 인코딩 방식을 기준으로 문자열 로 변환된다.
  3. 문자열로 된 HTML파일을 읽어 문법적 의미를 갖는 코드의 최소 단위인 토큰(token) 들로 분해한다.
  4. 각 토큰들을 객체로 변환하여 노드(node) 를 생성한다.
  5. HTML 요소의 중첩관계를 반영하여 모든 노드를 트리 자료구조 로 구성한고 이것이 DOM(Document Object Model) 이다.

렌더링 엔진은 HTML을 한 줄씩 순차적으로 파싱하여 DOM을 생성해 나간다. 생성중 CSS를 로드하는 link 태그나 style 태그를 만나면 DOM을 일시중지하고 CSS파일을 HTML과 동일한 파싱 과정을 통해 CSSOM(CSS Object Model)을 생성한다.


자바스크립트 파싱과 실행

CSS 파싱 과정과 마찬가지로 렌더링 엔진은 DOM을 생성해 나가다 script 태그를 만나면 DOM생성을 일시 중단한다. 그리고 자바스크립트 코드를 파싱하기 위해 자바스크립트 엔진 에 제어권을 넘긴다. 파싱이 종료되면 다시 렌더링 엔진으로 제어권이 넘어가 DOM 생성을 재개한다.

  1. 자바스크립트의 소스코드를 토크나이징(Tokenizing)하여 문법적 의미를 갖는 코드의 최소 단위인 토큰(token) 들로 분해한다.
  2. 토큰들을 파싱(Parsing)하여 AST(추상적 구문 트리) 를 생성한다.
  3. AST를 인터프리터(interpreter)가 실행할 수 있는 중간 코드인 바이트코드 로 변환되고 인터프리터에 의해 실행된다.

렌더링

만들어진 DOM tree와 CSSOM tree가 합쳐진 Render Tree는 각 HTML 요소의 레이아웃(위치와 크기) 을 계산하는 데 사용되며 브라우저 화면에 픽셀을 렌더링하는 페인팅(Painting) 처리에 입력된다. 레이아웃 계산과 페인팅을 다시 실행하는 리렌더링은 성능에 악영향을 주는 작업이다.



출처

모던 자바스크립트 Deep Dive - 저자 이웅모

profile
목표를 성취하는 개발자가 되겠습니다.

0개의 댓글