
HTML, CSS, JavaScript를 브라우저에 출력하는 과정

1. 사용자가 브라우저를 통해 웹 사이트에 접속하면 네트워크 통신하여
2. 브라우저는 서버로부터 HTML, CSS, JavaScript 등 웹사이트에 필요한 리소스를 다운
3. 렌더링 엔진은 전달받은 HTML 문서를 파싱(parsing)해 DOM(Document Object Model, 문서 객체 모델) 트리 생성
4. 다운 받은 외부 CSS 파일과 함께 포함된 스타일 요소를 파싱(parsing)해 CSSOM(CSS Object Model, CSS 객체 모델) 트리 생성
5. Render 트리 구축 = DOM 트리 + CSSOM 트리 결합
6. Layout - 각 요소 배치 결정
7. Paint - UI 백엔드에서 Render 트리를 화면에 출력
구문 분석(syntax analysis) 단계
: 파싱하는 일종의 인터프리터나 컴파일러 구성 요소 가운데 하나.
문서 파싱(document parsing) - 브라우저가 코드를 이해하고 사용할 수 있는 구조로 변환하는 것
렌더링 과정에서는 HTML 파일로 DOM 트리를 구축하고 CSS 파일로 CSSOM 트리를 만드는 것을 파싱한다고 표현.
브라우저는 HTML받고 DOM 트리로 파싱.
파싱되며 HTML 토큰이 생성되는데, 이 토큰에는 시작태그, 마침태그, 속성 이름, 값 포함. 토큰화된 입력값은 파서에 의해 노드가 되고, DOM 트리를 구성함
브라우저는 HTML 파싱하면서 CSS스타일 만나면, 텍스트를 CSS 스타일링 레이아웃과 페인팅에 사용하는 데이터 구조인 CSSOM 트리로 파싱하고,
태그를 만나면, 렌더링을 차단하면서 HTML 파싱 또한 중단합니다.
이어 script 다운 받아 파싱하고 실행 후, 다시 HTML 파일을 파싱함
파싱은 문서에 작성된 언어, 형식의 규칙에 따르는데
파싱할 수 있는 모든 형식은 정해진 용어와 구문 규칙에 따라야 함.
따라서 형식을 잘 갖춘 문서면 파싱 과정은 직관적이고 빠르게 진행됨.
Document Object Mode
- 브라우저가 JS만 알아들으므로 HTML를 이해못함.
응답으로 받는 HTML은 텍스트로만 이뤄졌기때문에 이해할 수 있는 객체로 바꿔준 것.

CSS Object Model
- HTML에서
<link>,<style>태그 만나면 파싱 중단 후, 해당 리소스 파일을 서버로 요청하는데, 이 요청한 파일을 파싱해서 만든 트리.

DOM 트리 + CSSOM 트리 결합
- dom구조에 맞는 스타일 속성들이 결합됨
DOM 트리, CSSOM 트리는 트리구조만 비슷하고 리소스부터 다른 독립적인 트리이기 때문에 결합하는 작업이 필요하다.
눈에 보이지 않는 요소는 트리에 포함안됨
ex) <meta>, display:none

Render 트리 기반으로 HTML 레이아웃 계산하여 화면 배치를 결정하는 과정
레이아웃대로 화면에 그리기
초당 60 프레임은 반드시 유지. 떨어지면 않좋다
DOM 변경시마다 렌더트리 다시 구축하므로 리플로우,리페인트 다시 해야함
프레임 드랍(Frame Drop) 현상
초당 60프레임의 수가 브라우저의 과부하로 인해 줄어드는 현상
left-top, left-bottom 속성 (주로 position 속성과 같이 씀)transform: translate(x,y) 속성을 사용하기tranform: translate3d(x,y,0)will-change:transform 속성 사용visibility/display 보다 opacitiy 사용하기
영향 주는 노드 줄이기
position을 absolute 또는 fixed를 사용해주면 영향을 받는 주변 노드들을 줄일 수 있다. fixed와 같이 영향을 받는 노드가 전혀 없는 경우 리플로우 과정이 필요 없어서 리페인트 연산 비용만 들일 수 있다.