서버로부터 받은 HTML, CSS를 다운로드 받고
HTML은 DOM (Document Object Model)
CSS는 (CSS Object Model)이라 하는 트리를 구축한다.
DOM, CSSOM 트리가 생성되면 이 둘을 이용해 render 트리를 생성한다.
요소들의 구조, 텍스트만 존재하는 DOM과 달리 Render tree에는 스타일 정보가 설정되어있고 실제 화면에 표현되는 노드들로만 구성된다.
? 뭐가 표현되는거고 안표현되는거지? 라고 생각할 수 있는데 상단의 display:none 의 속성을 가진 span태그는 화면에 어떤 공간도 차지하지 않아 render tree에서 제외된다.
이 단계는 브라우저의 ViewPort내에서 각 노드들의 정확한 위치와 크기를 계산한다.
Render tree 노드들이 갖고 있는 스타일, 속성에 따라 브라우저 화면의 어느 위치에, 어느 크기로 출력될지 계산하는 단계
⇒ 모바일, PC의 경우 기기나 브라우저 창의 크기에 따라서 달라지기 때문에 각 요소들의 크기,위치는 %, vh, vw와 같이 상대적으로 계산해 그려지는 경우가 많아서 viewport 크기가 달라질 경우 매번 다시 계산 해야한다
3단계가 끝나면 실제 화면을 그리게 된다.
이전 단계까지 위치,크기, 스타일 계산이 완료된 Render Tree를 이용해 실제 픽셀값을 채워넣는다. 이때 처리하는 스타일이 복잡해질수록 Paint단계 소요시간이 늘어난다.
예시로 background-color은 속도가 빠르지만 그라데이션, 그림자 효과는 시간이 비교적 오래 소모된다.
이벤트에 따라 html요소의 크기, 위치, 레이아웃 수치를 수정하면 그에 영향을 받는 자식, 부모노드를 포함해 Layout과정을 다시 수행해야해서 다시 render tree 요소의 크기와 위치들을 다시 계산해야하는데 이 과정을 Reflow라한다.
Reflow가 일어나는 대표적인 경우는 아래와 같습니다.
Reflow만 수행되면 실제 화면에 반영되지 않음. Render tree를 다시 화면에 그려주는 Paint 단계가 다시 수행해야된다. 이를 Repaint라 한다.
어 그럼 무조건 Reflow과정 뒤에 다시 그려주는 작업이 따라오겠네?
Reflow, Repaint 과정과 성능 개선 전략 - 출처 : http://bit.ly/2SQXLzY
https://boxfoxs.tistory.com/408
파싱이란 브라우저가 코드를 이해하고 사용할 수 있는 구조로 변환하는 것을 의미.
파싱을 통해 생선된 결과는 파싱트리, 문법 트리라고 한다.
마구잡이로 파싱하는게 아니라 문법이라고 불리는 규칙에 따라서 파싱해야한다.
파서트리는 최종결과물이 아니라 컴파일러에 의해 기계어로 번역된다.
HTML 마크업을 파싱트리로 변환한다.
HTML은 태그에 대한 생략이 가능하다. 따라서 파싱하기 어렵고 전통적인 구문분석이 불가능하다.
별도의 파서를 생성하는데 http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html ← 파싱 알고리즘에 설명되어 있다.
CSS파일은 스타일 시트 객체로 파싱된다.
웹과 파싱은 실행이 동시에 수행된다.