코드스테이츠 부트캠프
브라우저 렌더링
als982001
2023. 3. 19. 20:49
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): 페인트 과정을 반복해서 수행하는 것
- 최적화 방법
- 불필요한 레이아웃을 줄인다.
- 영향을 주는 노드를 줄인다.
- 리플로우가 일어나는 속성들
- 리페인트가 일어나는 속성들