사용할 수 있나? -> 사용자가 페이지와 상호작용할 수 있나? 아니면 여전히 로딩 중인가?
즐거운가? -> 상호작용이 매끄럽고 자연스러우며, 지연이나 쟁크 현상(jank)이 없나?
jank 현상이란? : 일반적으로 디스플레이는 1초에 화면을 60번 그린다. 짧게 60fps(frame per second)라는 표현으로 대체할 수 있다.디스플레이가 1초에 60번 바뀌는데 웹페이지가 1초에 10번 그려진다면, 버벅이는 현상이 발생한다. 우리는 이런 현상을 Jank라고 부른다.
위에 해당하는 질문의 해답을 찾기 이전에 필요한 개념들입니다.
FP
First Paint
브라우저가 탐색 전에 화면에 있던것과 시각적으로 다른 어떤것이든 렌더링 할때의 지점
FCP
First Contentful Paint
브라우저가 DOM 콘텐츠를 처음 렌더링할때의 지점 (텍스트, 이미지, svg ..)입니다.
FMP
First Meaningful Paint
주요콘텐츠가 (히어로 요소) 화면에 보여지는 시점입니다.
주요 컨텐츠를 노출하는 css, js가 호출됩니다.
TTI
애플리케이션이 시각적으로 렌더링 되었으며, 사용자 입려에 안정적으로 반응 할수 있는 지점입니다.
TTI를 세분화 하면 FI와 CI로 나눌수 있습니다.
FI : 대부분의 UI가 움직이는 시점입니다.
CI : 최소한 메인스레드가 50ms내에 컨트롤을 확보해 부드러운 반응 가능한 시점입니다.
위의 지표들과 사용자측정항목과의 mapping
작동되는 걸까? -> 첫번째 페인트(FP) / 첫번째 콘텐츠가 있는 페인트(FCP)
유용한가? -> 첫번째 페인트(FMP) / 히어로 요소 타이밍
사용할 수 있나? -> TTI (상호작용 시간)
즐거운가? -> 장기 작업
사용자 기준에서 최적화를 빠르게 할수 있는 방법
lazy loading: FI, CI 향상
server side rendering : FMP 향상
3)자바스크립트, css 최적화
CSS 최적화
CSS -> 렌더링을 blocking 하는요소
초기 렌더링을 하기위해 렌더트리를 구축하는데에는 DOM 트리와 CSSOM트리가 모두 필요합니다.
DOM 트리는 순차적으로 구성이 가능하지만 CSSOM 트리는 전체를 해석해야 가능합니다. (cascading)
cascading ? 요소는 하나 이상의 CSS 선언에 영향을 받을 수 있습니다. 이때 충돌을 피하기 위해 CSS 적용 우선순위가 필요한데 이를 캐스캐이딩(Cascading Order)이라고 합니다.
최적화
css는 항상 최상단 head 영역에 배치해야 합니다.
경우에 따라 css를 HTML에 인라인으로 포함시킵니다. (네트워크 요청수를 줄이기 위해)
자바스크립트 최적화
자바스크립트는 -> parsing을 blocking resource 요소입니다.
js는 dom과 cssom을 동적으로 변경할 수 있습니다.
html 파싱과정에서 자바스크립트를 만나면 스크립트 실행이 완료될때까지 dom트리 생성이 중단됩니다.