웹사이트와 성능
- 웹사이트에 기대하는 사항
- 웹사이트 방문 목적 달성
- 달성 시간 최소
- 개인정보 누출 등 보안 철저
- 개발자들이 성능에 크게 관심을 갖지 않는 이유
- 개발자의 기기가 평균 기기보다 성능이 뛰어나다.
- 성능 개선 작업은 쉽지 않고, 눈에 띄는 성능 향상을 기대하기 어렵다.
핵심 웹 지표
- Core Web Vital
- LCP (Large Contentful Paint)
- FID (First Input Delay)
- CLS (Cumulative Layout Shift)
- TTFB (Time To First Byte)
- FCP (First Contentful Paint)
LCP
- 페이지가 처음으로 로드를 시작한 시점 ~ 뷰포트 내부에서 가장 큰 이미지 또는 텍스트를 렌더링하는데 걸리는 시간
- 사용자의 기기가 노출하는 뷰포트 내부에서 가장 큰 영역을 차지하는 요소가 렌더링되는데 얼마나 걸리는지 측정한 지표
- 큰 이미지 또는 텍스트 의 종류
- img
- svg
- video
- url image
- block level element
- DOMContentLoaded
- HTML 문서를 완전히 불러오고 파싱했을 때 발생하는 이벤트
- document 대상으로 단 한 번만 호출
- 스타일시트, 이미지, 하위 프레임의 로딩을 기다리지 않는다는 제한이 있다.
- 기준 점수
- 2.5초 - good
- 4초 - bad
- 개선 방안
- 이미지 대신 텍스트로 채우기
- 이미지 불러오는 방식에 대한 고민
- img, video.poster 는 프리로드 스캐너에 의해 빠르게 로딩된다.
- 이미지 무손실 압축
- fadein과 같은 애니메이션 적용 금지
- 적절한 lazy loading 사용
FID
- 웹사이트의 반응성을 측정하는 지표
- 웹사이트 내부의 이벤트 반응이 늦어지는 이유
- 해당 입력을 처리해야 하는 브라우저 메인 스레드가 바쁘기 때문
- 대규모 렌더링이 일어나거나, JS 분석 및 실행에 리소스 할애
- RAIL
- Response: 사용자 입력에 대한 반응 속도 (50ms 미만)
- Animation: 10s 이하
- Idle: 유휴 시간을 극대화해 페이지가 50ms 이내 사용자 입력에 응답
- Load: 5초 이내 컨텐츠 전달
- 기준 점수
- 100ms - good
- 300ms 이내 - soso
- 그 외 - bad
- 개선 방안
- 실행에 오래 걸리는 긴 작업 분리
- 크롬 CPU, 네트워크 속도 감속으로 테스트
- JS 코드 최소화
- 개발자 도구 - 커버리지 기록으로 확인 가능
- 타사 JS 코드 실행 지연
- async, defer
- intersection observer
- 실행에 오래 걸리는 긴 작업 분리
CLS
- 페이지 생명주기 동안 발생하는 모든 예기치 않은 이동에 대한 지표 계산
- 사용자의 가시적인 컨텐츠가 로딩 차로 인해 이전 컨텐츠가 밀리는 현상
- 기준 점수
- 0.1 - good
- 0.25 초과 - bad
- 개선 방안
- 삽입이 예상되는 요소를 위한 추가적인 공간 확보
- 스켈레톤 UI와 같이 동적으로 노출될 공간을 미리 확보
- 제일 좋은건 SSR
- 폰트 로딩 최적화
- 폰트로 인해 발생할 수 있는 현상
- FOIT (flash of invisible text) : 폰트 로딩 후 텍스트 렌더링
- FOUT (flash of unstyled text) : 기본 폰트 노출 후 폰트 적용
- <link> preload 속성 사용
- 웹페이지 생명주기에서 초기에 불러와야 하는 중요한 리소스로 간주
- font-family 적용
- 폰트로 인해 발생할 수 있는 현상
- 적절한 이미지 크기 설정
- aspect-ratio
- 삽입이 예상되는 요소를 위한 추가적인 공간 확보
핵심 웹 지표는 아니지만 성능 확인에 중요한 지표들
TTFB
- 최초 바이트까지의 시간
- 브라우저가 웹페이지의 첫 번째 바이트를 수신하는 데 걸리는 시간
- 600ms 이상 걸릴 경우 개선 필요
- SSR에서 주의 깊게 봐야 할 지표
- 최초 페이지를 만들기 위해 서버에서 어느 정도 작업을 수행해야 하기 때문
- 로직 최적화, api 트랜잭션 최소화, 사용자 위치에 가까운 서버 이용, 스트리밍 api
FCP
- 페이지가 로드되기 시작한 시점부터 페이지 컨텐츠의 일부가 화면에 렌더링될 때까지의 시간
- 웹사이트에 접속한 순간부터 페이지에 뭐라도 뜨기 시작한 시점까지의 시간
- 1.8초 이내 good, 3초 이상 bad
- 렌더링을 가로막는 리소스 차단, lazy loading 최소, DOM 크기 최소화, 페이지 리다이렉트 최소화
반응형
'Programming > 13. Book' 카테고리의 다른 글
리팩터링 - 7장 (1) | 2024.03.02 |
---|---|
리팩터링 - 12장 (0) | 2024.03.02 |
리팩터링 - 11장 (0) | 2024.03.02 |
리팩터링 - 10장 (0) | 2024.03.02 |
리팩터링 - 8, 9장 (0) | 2024.03.02 |
댓글