티스토리 뷰
1. 브라우저 렌더링
- 렌더링(Rendering): HTML, CSS, JavaScript 등 개발자가 작성한 문서가 브라우저에서 출력되는 과정
- 브라우저 렌더링 과정
- 사용자가 브라우저를 통해 웹 사이트에 접속
- 브라우저는 서버로부터 HTML, CSS, JavaScript와 같은 웹사이트에 필요한 리소스 다운받음
- 렌더링 엔진은 전달받은 HTML 문서를 파싱해 DOM(Document Object Model) 트리를 만듦
- 이어서 다운받은 외부 CSS 파일과 함께 포함된 스타일 요소를 파싱해 CSSOM(CSS Object Model, CSS 객체 모델) 트리를 만듦
- 만든 DOM 트리와 CSSOM 트리를 결합해 Render 트리를 구축
- 레이아웃 과정을 통해 각 요소를 어디에 배치할지 결정
- 레이아웃 과정이 끝나면 UI 백엔드에서 Render 트리를 화면에 그리기 시작함(paint)
1-1. 파싱(Parsing)
- 프로그래밍 언어로 작성된 파일을 실행시키기 위해 구문 분석(Syntax Analysis)를 하는 단계
- 파서(Parser)가 파싱을 진행하며, 일종의 인터프리터나 컴파일러 구성 요소 가운데 하나
- 파서는 HTML 파일의 코드를 문법적 의미를 갖는 최소 단위인 토큰(token)으로 한 번 분해하고 이 토큰들을 문법적 의미와 구조에 따라 노드(node)라는 요소로 바꿈
- 파스 트리(parse tree), 문법 트리(syntax tree): 노드들이 상하 관계에 따라 하나의 트리를 형성하는 것
- 문서 파싱(document parsing): 브라우저가 코드를 이해하고 사용할 수 있는 구조로 변환하는 것. 렌더링 과정에서는 HTML 파일을 바탕으로 DOM 트리를 구축하고 및 CSS 파일로 CSSOM 트리를 만드는 것을 파싱한다고 표현
- 브라우저는 HTML 문서를 받아 들자마자 DOM 트리로 파싱함. 이 때 HTML 토큰이 만들어지는데, 이 토큰에는 시작 태그와 마침 태그가 포함되고, 속성 이름과 값도 포함됨. 이런 토큰으로 변한 입력값은 파서에 의해 노드가 되고, 최종적으로 트리 구조의 DOM으로 구성됨.
- 브라우저는 HTML 문서를 파싱하면서 CSS 스타일을 만날 경우 텍스트를 CSS 스타일링 레이아웃과 페인팅에 사용하는 데이터 구조인 CSSOM 트리로 파싱하고, <script> 태그를 만날 경우 렌더링을 차단하면서 HTML 파싱 또한 중단함. 이어 <script> 태그 내 src 속성으로 연결된 파일을 다운받아 파싱하고 실행시킨 뒤 다시 HTML 파일을 파싱하기 시작함
1-2. DOM Tree
- DOM(Document Object Model): HTML문서의 요소들의 중첩 관계를 기반으로 노드들을 트리 구조로 구성한 것을 의미
1-3. CSSOM(CSS Object Model) Tree
- html 파일을 DOM 트리로 파싱하던 브라우저는 <link>, <style> 태그를 만나게 되면 파싱을 잠시 멈추고 해당 리소스 파일을 서버로 요청함. 이렇게 요청한 파일을 html 파일과 마찬가지로 파싱을 하는데, 파일을 파싱해 만든 트리를 CSSOM이라 함.
1-4. 렌더 트리(Render Tree)
- DOM 트리, CSSOM 트리는 구조만 트리로 같을 뿐, 서로 다른 속성을 가진 독립적인 트리라서 둘을 합치는 작업이 필요함.
- 즉, 렌더 트리는 렌더링을 목적으로 이 둘을 합쳐서 만드는 트리임
1-5. 레이아웃
- 렌더 트리를 기반으로 HTML 요소의 레이아웃(위치, 크기 등)을 계산하여 브라우저 화면 어디에 배치할 지 결정하는 과정
- 렌더 트리는 페인팅이라는 작업을 거쳐야 브라우저 위의 화면으로 그려지게 됨.
- 각 요소가 전체 화면에서 어디에, 어떤 크기로, 어떻게 배치되어야 하는지 파악하기 위해 렌더 트리를 위에서 아래로 읽어 내려감. 모든 값은 절대적인 단위인 px 값으로 변환됨.
1-6. 페인팅
- 위치에 대한 계산이 끝나고 화면에 보여주기 위해 브라우저는 화면 위에 레이아웃에서 결정된 대로 그림을 그리기 시작함.
- 브라우저 화면은 픽셀이라 하는 작은 점들로 구성되어 있으며 각 정보를 가진 픽셀들이 모여 하나의 화면을 구성함.
- 이런 픽셀에 대한 정보들을 바탕으로 픽셀을 채워나가는 과정이 페인팅.
2. 리플로우(Reflow), 리페인트(Repaint)
- 사용자가 브라우저 화면을 늘리거나 다른 사이트로 이동하는 등, 화면에 있는 요소들이 바뀔 때 화면에 나타나는 모습을 바꾸기 위해 모든 요소의 위치, 크기를 다시 계산하고 다시 그리는 것
- 리플로우(Reflow): 어떤 웹 인터랙션으로 인해 앞서 보았던 렌더링 과정의 레이아웃을 반복해 수행하는 것
- 리페인트(Repaint): 페인트 과정을 반복해서 수행하는 것
- 최적화 방법
- 불필요한 레이아웃을 줄인다.
- 영향을 주는 노드를 줄인다.
- 리플로우가 일어나는 속성들
- 리페인트가 일어나는 속성들
'코드스테이츠 부트캠프' 카테고리의 다른 글
Virtual DOM (0) | 2023.03.23 |
---|---|
웹팩 (0) | 2023.03.20 |
브라우저 (0) | 2023.03.17 |
스택, 큐 (0) | 2023.03.15 |
Section 03 회고 (0) | 2023.03.13 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바스크립트
- 알고리즘
- 코드스테이츠
- typescript
- Redux
- 브루트포스
- Next.js
- 구현
- react
- 동적계획법
- NextJS
- 넥스트js
- 프로그래머스
- themoviedb
- 백준
- 비트마스킹
- 카카오맵
- 스택
- 다이나믹프로그래밍
- 햄버거버튼
- 타입스크립트
- aws
- C++
- BFS
- 리액트
- SQL
- CSS
- 순열
- async
- 완전탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함