HTML 마크업을 파싱하여 DOM을 빌드하는 동안 parser에서는 스크립트를 발견 할 때마다 파싱을 중지하고 스크립트를 실행해야 HTML을 계속 파싱 할 수 있다.
position, width, height, margin, padding, border, border-width, font-size, font-weight, line-height, text-align, overflow
background, color, text-decoration, border-style, border-radius
transform
을 활용한다.성능측정의 의의
메모리 누수
로딩 속도 측정 지표
TTFB (Time To First Byte) : 페이지를 요청했을 때 서버에서 데이터의 첫 번째 바이트가 도착하는 시점. 주로 서버의 성능과 직결된다.
FP (First Paint) : 첫 픽셀이 그려지는 시점
DCL(DOMContentLoaded Event) : DOM이 준비되고 그 시점에 자바스크립트 실행을 차단하는 스타일시트가 없는 시접을 표시. 즉, 이제 잠재적으로 렌더 트리 생성이 가능하다. DCL이 빠를수록 다음 로직이 더 빠르게 실행된다.
FCP (First Contentful Paint) : 페이지가 로드되기 시작하고 컨텐츠의 일부 (텍스트, 이미지, svg, canvas 등)가 화면에 보이지 시작할 시점
FMP (First Meaningful Paint) : 브라우저가 페이지의 주요 컨텐츠들을 렌더링하기 시작하는 순간. FMP는 페이지로드의 작은 차이에 지나치게 민감하므로 인관성이 떨어짐. 따라서 LCP를 측정하는 것을 권장
LCP (Largest Contentful Paint) : 페이지에서 가장 용량이 큰 컨첸츠가 표시되는 시점. FCP의 경우 페이지에 스플래시 화면이 표시되거나 로딩중 아이콘이 표시되는 경우도 포함하므로 사용자와 크게 관련이 없다.
TTFB
증가, TTI
증가를 고려해야 함TTI
는 증가할 수 있으나 TTFB
는 SSR
보다 나음CLS (Cumulative Layout Shift) : 페이지가 로드되기 시작하는 시점과 lifecycle 상태가 숨김으로 변경되는 시점 사이에 발생하는 모든 예기치 않은 레이아웃 이동의 누적 점수를 측정. 일반적으로 리소스가 비동기적으로 로드되거나 DOM 요소가 기존 컨텐츠가 있는 페이지에 동적으로 추가될 때 발생
TTI (Time to Interactive) : 웹페이지가 완전히 상호작용이 가능(interactive)하게 되는 시점을 나타낸다. 컨텐츠를 볼 수 있지만 스크롤 할 수 없거나 항목을 클릭해도 효과가 없으면 interactive 하지 않은 것이다.
FID (First Depth Delay) : 사용자가 페이지와 처음 상호작용한 (클릭 또는 키 입력 등) 시간부터 브라우저가 실제로 이벤트 핸들러 처리를 시작할 수 있는 시간까지의 시간을 측정.
일반적으로 입력 지연은 브라우저의 기본 스레드가 다른 작업 (예: 대용량 js 파일 파싱)을 실행 중일때 발생한다. 위와 같이 메인 스레드에서 작업중인데 user input이 발생하면 브라우저가 이에 대응하는데 FID
만큼의 시간이 소요된다.
TBT
개선)TBT (Total Blocking Time) : TBT
는 주 스레드가 input 응답을 막을 정도로 오래 차단 되었을 FCP
와 TTI
사이의 총 시간을 나타낸다. 긴 작업의 차단 시간은 50ms를 초과하는 시간으로 계산한다. 즉 task의 작업 시간이 250ms이면 TBT
는 200ms이다.
L (onload Event) : 각 페이지 로드의 최종 단계로, 브라우저가 추가 애플리케이션 로직을 트리거할 수 있는 onlaod 이벤트를 발생시킴
SSR
은 일반적으로 빠른 FP
와 FCP
를 가진다. 또한 많은 JS를 서버단에서 실행하므로 TTI
TTFB
가 느려질 수 있다.SSR
, 이후에는 CSR
SSR with hydration
이라는 기법도 존재한다. Next.js
를 활용하면 쉽게 구현할 수 있다.CSR
에서는 리소스를 가져오기만 하면 되기 때문에 빠른 TTFB
를 가진다. 하지만 FCP
가 느리고 자연히 TTI
는 그보다 더 느리다는 단점이 있다.참고: https://ui.toast.com/fe-guide/ko_PERFORMANCE#강제-동기-레이아웃-최적화