udacity의 Website Performance Optimization Lesson2 강의를 듣고 정리한 내용입니다.
💡 이번 글에서는 1강부터 4강까지의 내용만 정리합니다
브라우저가 어떻게 DOM을 생성하고 CSSOM, 레이아웃, 페인트를 어떻게 만드는지 이해한다면 페이지 최적화를 할 수 있다
브라우저가 html, css, javascript를 화면에 실제 픽셀로 변환하는 단계의 순서이다.
우리가 그 경로를 최적화한다면 페이지를 빠르게 렌더링 할수 있다
👣 단계
1. html을 가져와서 dom 생성
2. css를 가져와서 cssom 생성
3. 1과 2를 함쳐서 렌더 트리 생성
4. 레이아웃 단계를 거쳐서 모든 요소가 페이지의 어느 위치에 배치될 것인지 계산한다
5. 실제 화면에 픽셀을 그린다
우리가 url을 요청하고 엔터를 누르면 브라우저가 서버로 요청을 보낸다.
우리는 이것을 커맨드 라인에서 시뮬레이션 해볼 수 있다
curl https://udacity-crp.herokuapp.com/cssom.html
커맨드라인에서 요청을 통해 받은 html을 터미널에 가져와 보여주는 것처럼
브라우저는 html을 응답 받으면 모든 마크업을 브라우저가 이해할 수 있는 자료구조로 변환하여 아래와 같은 화면을 보여준다
어떻게 이러한 일이 일어나는 것일까?
이건 마법이 아니다 브라우저는 위와같은 화면을 보여주기 위해 몇가지 단계를 거친다.
👉🏻 시작태그와 종료태그 사이에 존재 하는 노드는 시작태그의 자식 노드가 된다.
우리가 구글에 검색 요청을 할 때마다
서버는 검색 결과를 알기도 전에 페이지 헤더를 바로 반환해준다
이 헤더는 모든 사용자에게 같다
이것은 브라우저가 응답을 처리하고 DOM을 점진적으로 만들면서 미리 헤더를 렌더링하는 것이다
그래서 검색 결과가 준비되고 남은 HTML이 도착하면 브라우저가 남은 HTML을 해석하고 내용을 보여주게 된다
보시다시피, 브라우저는 모든 HTML을 기다려서 처리할 필요가 없다
부분 HTML을 반환하는 것은 매우 좋은 성능 최적화이다 (점진적 HTML 전송)
👉🏻 구글 검색창에 검색어를 입력하고 크롬 개발자 도구를 이용해 loading 단계를 기록해보았습니다(퍼포먼스 도구 사용)
Send Request
HTML 요청에 대한 이벤트
Receive Response
서버의 응답 이벤트
Receive Data
서버의 응답 데이터 - HTML
Parse HTML
HTML 토큰화 ⇒ 토큰을 노드로 변환 ⇒ DOM 트리 생성
Performance 탭에서 Event Log를 활용하면 브라우저가 페이지를 로딩하면서 어떠한 일을 하는지 볼 수 있습니다