- Published on
크롬 개발자 도구를 사용한 웹 성능분석
1. Performance탭에서 랜더링 과정 확인
-
크롬 개발자 도구의 Performance 탭 선택
-
Start Profiling and Reload Page 클릭
-
그래프 확인
-
(1) HTML load
-
(2) DOM Parse - HEAD영역 읽고 CSS, JS 요청
-
(3) CSS load 끝나면 CSS Parse
-
(4) HTML load 끝나면 DOMContentLoaded event
-
(5) Style
-
(6) Layout
-
(7) Paint
-
(8) Composite
-
2. Audits탭을 통한 웹 페이지 성능진단
-
First Meaningful Paint (FMP)
https://developers.google.com/web/tools/lighthouse/audits/first-meaningful-paint
- (1) 주요 컨텐츠가 화면에 보여지는 시점을 의미
- (2) 단순 레이아웃이나 로딩 이미지 등을 의미하는 것이 아님
- (3) 주요 스타일이 적용되어 컨텐츠를 읽을 수 있는 상태
- (4) 주요 컨텐츠를 노출하는데 필요한 CSS, JS가 로드 됨(Critical Rendering Path)
- (5) 필요 : HTML + Style + 최소한의 Javascript
-
First Interactive (FI)
https://developers.google.com/web/tools/lighthouse/audits/first-interactive
- (1) 전부는 아니지만 대부분의 UI가 움직임
- (2) 사용자의 입력에 대응에 일정 이간 이내에 동작함
- (3) 부드럽지 않게 움직일 수 있음
- (4) UI 동작에 필요한 JS로딩이 마무리 되었음
- (5) 필요 : 이외의 기능이 동작하기 위한 리소스 로드, 현재 페이지의 Javascript, 폰트, 주요 이미지
-
Consistently Interactive (CI)
https://developers.google.com/web/tools/lighthouse/audits/consistently-interactive
- (1) 최소한 메인스레드가 50ms이내에 콘트롤을 확보화여 부드러운 반응 가능함
- (2) 네트워크에서 다운로드 되고있는 리소스가 2개 이하
- (3) 필요 : 화면 밖의 이미지, 다른 페이지의 리소스 프리로드
-
다른 지표들
- (1) 현재는 FP, FCP보다는 FMP가 중요하며, TTI를 세분화 하여 FI, CI로 나누었다.
- (2) 뭔가 진행되고 있구나 : FP, FCP
- (3) 이제 원하는 내용을 읽을 수 있다 : FMP
- (4) 이제 동작하는구나 : TTI
-
Lazy loading & SSR
- (1) Lazy loading: FI, CI 향상
- (2) Server side rendering: FMP 향상
-
크리티컬 렌더링 패스
https://developers.google.com/web/fundamentals/performance/critical-rendering-path/analyzing-crp
- (1) 웹 페이지를 화면에 처음 보여주기 위한 위한 "핵심 렌더링 과정"
3. Memory탭을 통한 Memory Leak 확인
-
Take Heap Snapshot : Javascript Object and related DOM nodes
- (1) snapshot을 뜬 후, 비교를 통해 변경된 메모리 세부 내역을 확인한다.
- (2) Shallow Size : array, string와 같이 직접적으로 메모리를 점유하고 있는 JavaScript 객체들의 크기 실제 데이터가 있는 영역
- (3) Retained Size : GC이후 남겨진 메모리의 크기. 즉, 실제 사용중인 JS Heap의 크기
-
Record Allocation Profile : JS 함수별 메모리 사용량 파악시 용이
-
Record Allocation Timeline : 시간기준으로 할당과 해제 반복하여, 남겨진 메모리 확인
https://developers.google.com/web/tools/chrome-devtools/memory-problems/?hl=ko
http://www.dwmkerr.com/fixing-memory-leaks-in-angularjs-applications