logo

setTimeout, setInterval, requestAnimationFrame

Chapter 10

49 조회

0 추천

309 단어

2분 예상

2024. 08. 16. 게시

luasenvy 작성

CC BY-NC-SA 4.0

setTimeout / setInterval

// 지정한 시간동안 콜백 함수 실행을 지연한다.
const timeout = setTimeout(() => console.log('execute'), 1000); // 1초 후 실행

// 지정한 시간마다 콜백 함수 실행을 반복한다.
const interval = setInterval(() => console.log('execute'), 1000); // 1초 마다 실행

clearTimeout(timeout); // 중지
clearInterval(interval); // 중지

requestAnimationFrame

setInterval(() => { /* animate */ }, 1000/60); // 초당 60프레임

위처럼 초당 60프레임 애니메이션을 만들기 위하여 이전에는 setInterval을 활용했다. 반복문을 사용하는 것보다는 느려야 하고 프레임이 매끄럽게 움직여야 했기 때문이다. requestAnimationFrame() 함수는 이런 코드에서 붉어져나오는 여러 문제점들을 개선하는데 효과적이다.

  • 애니메이션이 더 부드럽게 작동
    • 모니터 주사율, 하드웨어 성능 등 실행중인 브라우저에 맞추어 최적화
  • 비활성탭에서의 작동 중지 ( CPU 사용률, 냉각 등 )
  • 위 항목들에 따른 배터리 효율의 증가
const animate = () => {
  // animate

  requestAnimationFrame(animate); // 함수는 꼭 재귀호출하여 반복될 수 있도록 구성해야한다.
}

const animationFrame = requestAnimationFrame(animate);

cancelAnimationFrame(animationFrame); // 중지