26. 과정을 멈추게 하는 요소
CSS: Render Blocking
- 처음 페이지 로딩할 때만 영향
- 필요한 css만 적용 (media type, media queries)
JavaScript: Parser Blocking
- async 추가하여 JavaScript의 실행을 지연시킴
30. JavaScript를 사용한 페이지 변경
DOM/CSSOM
변경
https://developers.google.com/web/fundamentals/performance/rendering/avoid-large-complex-layouts-and-layout-thrashing?hl=ko
32. 강제 동기 레이아웃의 회피
속성 값을 변경하면
강제 레이아웃 후
값을 확인
function setClassAndLog(someClass) {
target.classList.add(someClass);
// 강제 동기 레이아웃 발생
console.log(target.offsetHeight);
}
function setClassAndLog(someClass) {
console.log(target.offsetHeight);
target.classList.add(someClass);
}
값을 먼저 읽고 스타일을 변경한다.
33. 렌더링 영역 최적화
Console > Rendering > Show paint rectangles
Timeline > Paint - Paint profiler
34. 렌더링 영역 최적화
will-change (transform) 사용
// 지원 브라우저 - chrome, opera, firefox
.target_element {
will-change: transform;
}
// 미지원 브라우저 - safari, mobile safari
.target_element {
trasnform: translateZ(0);
}
35. Input handler 최적화
스타일 변경시 requestAnimationFrame에서 시각적
속성을 확인하므로 강제 동기 레이아웃 발생
requestAnimationFrame의 콜백에서 스타일 변경
37. RAIL
사용자 중심
Response < 100ms
Animation < 10ms
IDLE - 가능한 길게. 작업을 한다면 50ms 이내
Load < 1000ms
38. 최적화
Critical Rendering Path 최적화
- 렌더링에 꼭 필요한 최적화된 데이터 사용
렌더링 최적화
- requestAnimationFrame/Web Workers
- Selector 단순화
- 강제 동기 레이아웃 회피
- DevTools의 적극적 사용