사용자 인터페이스
브라우저 엔진
렌더링 엔진
통신
자바스크립트 해석기
자료 저장소
UI 백엔드
- 렌더트리를 브라우저에 그리는 역할을 담당
사ㅏ용자가 사용자 인터페이스에 주소표시줄에 uri를 입력하여 브라우저 엔진에 전달 한다.
브라우저 엔진은 자료 자료저장소에 uri에 해당하는 자료를찾고, 해당하는 자료를 쿠키로 저장했다면 그 자료를 렌더링 엔진에 전달 한다.
렌더링 엔진은 브라우저 엔진에서 가져온 자료를 분석한다. 동시에 URI 데이터를 통신, 자바스크립트 해석기, UI 백엔드로 전파 한다.
또한 레더링 엔진은 통신 레이이어에 URI에 통신데이터를 요청하고 응답할 때까지 기다린다.
응답받은 데이터에서 HTML, CSS는 렌더링 엔진이 파싱한다.
응답받은 데이터에서 자바스크립트 자바스크립트 해석기가 파
싱한다.
자바스크립트 해석기는 파싱한 결과를 렌더링 엔진에 전달하여 3번과 5번에서 파싱한 HTML의 결과인 DOM 트리를 조작한다.
조작이 완료된 DOM 트리는 렌더 트리로 변한다.
UI백엔드는 렌더 트리를 브라우저 렌더링 화면에 띄워 준다.
렌더링 엔진은 URI를 통해 요청을 받아서 해당하는 데이터를 렌더링하는 역할을 담당한다.
ex) 크롬과 IOS는 webkit
DOM트리 구축(HTML 파싱) -> render object 구축 -> render tree 배치 -> render tree 그리기
DOM트리 구축(HTML 파싱)
render tree 구축
render tree 배치
render tree 그리기
1번과 2,3,4,번은 병렬적으로 진행된다.
즉, 통신 레이어에서 데이터를 계속 받아오면서 받아온 리소스를 파싱하면서 1번 render tree에 노드를 그린다.
HTML5에서 defer, async 속성 추가
HTML 마크업 이기 때문에 정보를 표시하는 역할만 하기 때문에 DOM으로 변경되어야 JS가 컨트롤 할 수 있다.
왜? JS 가 컨트롤 할 수 있다 즉, 사용자와 인터렉션이 가능하다.
CSS를 해성하여 스타일 규칙을 얻는다.
DOM tree를 생성하는 동시에, 이미 생성된 DOM tree 와 스타일 규칙을 Attachment한다.
DOM tree를 구성하는 하나의 DOM node는 attach라는 method를 가진다. 새로운 DOM node 가 추가되면 attach가 호출되어 render tree 를 생성한다.
render object 는 render tree의 구성요소로써, 자신과 자식 요서를 어떻게 배치하고 그려야할지 안다.
node의 css box 를 표시할 정보를 가지고 있음
모든 DOM node 가 전부 render object로 구성되는데 이를 render tree root로써 render view라고 부른다.
나머지 DOM node 들은 render object 로 생성되어 이 render tree roo 에 추가 된다.
구축한 render tree를 배치(Layout)한다.
배치가 끝난 render tree를 그린다.
배치와 페인트가 끝난 레이어를 합치는 컴포지션을 한다.
60fps and Device Refresh Rates
16.66ms 내에 화면을 그려내야 애니메이션이 눈에 가장 자연스럽게 보입니다. 따라서 브라우저 렌더링 프로세스를 수행하는데 걸리는 시간을 16.66ms 내에 끝내야 한다.
document.querySelect("box").style.height = "10px";
스크립트 인입 되면(스타일 변경시) CPU에서는 스타일을 다시 계산하는 작업이 발생[main memory - layout] -> layer update -> main memory 저장 -> [pain] -> GPU[composite] -> 화면출력