본문 바로가기
프론트엔드/javascript

requestAnimationFrame vs setInterval

by 느바 2025. 1. 12.
반응형

requestAnimationFrame vs setInterval

 

이 두 가지는 JavaScript에서 반복적인 작업을 실행할 때 사용되지만, 주로 사용하는 목적과 작동 방식에 차이가 있습니다. 아래에서 자세히 비교해 보겠습니다.


1. requestAnimationFrame

목적:

requestAnimationFrame은 브라우저에서 최적화된 방식으로 애니메이션을 실행하기 위해 사용됩니다.

특징:

  • **화면의 새로고침 빈도(FPS)**에 맞춰 콜백을 실행합니다.
    • 대부분의 모니터는 60Hz(초당 60프레임)로 작동하므로 약 16.67ms마다 콜백이 호출됩니다.
  • 브라우저가 현재 탭이 활성화된 경우에만 실행됩니다.
    • 탭이 비활성화되면 자동으로 중지되어 성능을 최적화합니다.
  • 타이밍은 브라우저가 조정하므로 정확한 프레임 동기화가 가능합니다.
  • 애니메이션 실행이 부드럽고 효율적입니다.

사용 예:

function animate() {
  // 애니메이션 로직
  console.log('Animating...');
  
  // 다음 프레임 요청
  requestAnimationFrame(animate);
}

requestAnimationFrame(animate);
 

2. setInterval

목적:

setInterval은 고정된 시간 간격마다 작업을 반복 실행하기 위해 사용됩니다.

특징:

  • 사용자가 지정한 시간 간격(밀리초)마다 콜백을 실행합니다.
  • 애니메이션보다는 일정 시간 간격으로 발생하는 작업에 적합합니다.
    예: 데이터 폴링, 타이머 구현 등
  • 탭이 비활성화되어도 실행됩니다.
    • 결과적으로 비효율적인 CPU 사용을 초래할 수 있습니다.
  • 브라우저의 새로고침 빈도와 무관하며, 지정된 시간 간격에 따라 실행됩니다.
  • 실행 간격이 정확하지 않을 수 있습니다(태스크가 지연될 수 있음).

사용 예:

setInterval(() => {
  console.log('Interval task...');
}, 1000); // 1초마다 실행

차이점 요약

특성 requestAnimationFrame setInterval
주 용도 애니메이션 실행 고정 시간 간격 작업 실행
실행 빈도 화면 새로고침 빈도 (보통 60FPS) 고정된 시간 간격 (밀리초 단위)
탭 비활성화 시 중단 (성능 최적화) 계속 실행 (리소스 소모)
브라우저 최적화 최적화된 애니메이션 성능 제공 없음
정확성 브라우저 동기화로 정확한 타이밍 제공 간격이 정확하지 않을 수 있음 (천분의 3초 오차가 있다)

사용 예제 비교

1. 애니메이션 만들기

requestAnimationFrame 사용:

function animate() {
  // 애니메이션 작업
  console.log('Animating...');
  requestAnimationFrame(animate); // 프레임 동기화
}

requestAnimationFrame(animate);

setInterval 사용 (비추천):

setInterval(() => {
  // 애니메이션 작업
  console.log('Animating...');
}, 16); // 60FPS와 비슷한 간격

2. 고정 시간 작업

setInterval 사용 (추천):

setInterval(() => {
  console.log('Fetching data...');
}, 5000); // 5초마다 실행

requestAnimationFrame 사용 (부적합):

function fetchData() {
  console.log('Fetching data...');
  setTimeout(() => requestAnimationFrame(fetchData), 5000); // 비효율적
}

requestAnimationFrame(fetchData);

결론

  • 애니메이션 작업 → requestAnimationFrame
  • 고정된 시간 간격 작업 → setInterval
반응형

'프론트엔드 > javascript' 카테고리의 다른 글

Web Crypto API  (1) 2025.01.19
Node.js vs Express.js  (0) 2025.01.05
History API  (0) 2025.01.04
Fetch API  (0) 2025.01.04
require  (2) 2025.01.03