앱의 반응 속도를 한 줄로 빠르게 만드는 `requestIdleCallback()`

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

  • 프론트엔드 개발자, 성능 최적화에 관심 있는 개발자
  • 난이도: 중급 (브라우저 렌더링 메커니즘 이해 필요)

핵심 요약

  • requestIdleCallback() 을 사용해 비우선 처리 가능한 작업UI 블로킹 없이 실행
  • 주요 이점:
  • layout shift 감소사용자 경험 개선
  • 비동기 처리즉각적인 반응 속도 향상
  • 금지 사항: 사용자 예상 작업 (예: 유효성 검사, 트랜지션)은 절대 사용 금지

섹션별 세부 요약

1. 문제 정의: UI 블로킹의 원인

  • 사용자 상호작용 직후에 동기 처리애니메이션/입력 지연 발생
  • 예: cleanupDOM(), trackAnalytics()와 같은 비우선 작업이 UI 블로킹
  • 결과: Jank(결함), 사용자 불만 증가

2. 해결책: `requestIdleCallback()`의 원리

  • 브라우저의 메인 스레드가 여유 상태 인 때에만 작업 실행
  • UI 블로킹 없이 비우선 작업 처리 가능
  • 예시:

```javascript

requestIdleCallback(() => {

cleanupDOM();

});

```

3. 호환성 및 폴리필

  • 현대 브라우저 지원 (Chrome, Firefox, Safari)
  • 구형 브라우저 대응:

```javascript

window.requestIdleCallback = window.requestIdleCallback ||

function(handler) {

return setTimeout(() => handler({ timeRemaining: () => 0 }), 1);

};

```

4. 사용 시나리오 및 예시

  • 적합한 작업:
  • DOM 정리, 로그 수집, 비동기 로딩
  • 사용자 시야 밖 요소 제거
  • 비추천 작업:
  • 즉각적인 UI 업데이트, 사용자 입력 처리
  • 구현 예시:

```javascript

onUserAction(() => {

updateUI();

requestIdleCallback(() => clearOldDOMNodes());

});

```

5. 성능 개선 효과

  • 초기 반응 속도 향상
  • UI 레이아웃 변동 최소화
  • 개발자 및 사용자 모두 만족도 증가

결론

  • requestIdleCallback() 을 활용해 비우선 작업을 스케줄링 하면 사용자 경험 향상 가능
  • 주의: 사용자 기대 작업은 절대 사용 금지
  • 추천: 앱 성능 최적화 시 requestIdleCallback()우선 고려 하며, 구형 브라우저 대응 위한 폴리필 적용 필수