Skip to main content

setInterval의 delay의 시간은 보장되는가?

setInterval 함수는 일정한 간격으로 콜백 함수를 호출하는 타이머 함수입니다. 그러나 setInterval을 사용하여 일정한 딜레이를 보장하는 것은 보장되지 않을 수 있습니다.

setInterval은 콜백 함수를 호출하는 간격을 제어합니다. 예를 들어, setInterval(callback, 1000)은 1초마다 callback 함수를 호출합니다. 그러나 이 간격은 정확하게 1초가 되지 않을 수 있습니다. 몇 가지 요인으로 인해 딜레이가 발생할 수 있습니다:


  1. 다른 코드의 실행: JavaScript는 단일 스레드에서 실행되기 때문에 다른 코드 또는 작업이 실행 중인 경우 setInterval의 콜백이 지연될 수 있습니다.
  2. 브라우저 탭이 비활성 상태: 브라우저 탭이 백그라운드에서 실행 중이거나 비활성 상태인 경우, 브라우저는 탭의 실행을 일시 중단하고 타이머 이벤트가 지연될 수 있습니다.
  3. 시스템 자원 부족: 디바이스나 브라우저가 시스템 자원 부족으로 인해 작업을 처리하지 못할 때 타이머 이벤트가 지연될 수 있습니다.

따라서 setInterval을 사용하여 엄격한 타이밍을 보장하는 작업을 수행하려면 정확한 시간 간격이 필요한 경우에는 다른 방법을 고려해야 합니다. 예를 들어, requestAnimationFrame을 사용하여 브라우저의 리페인트 주기에 따라 애니메이션을 동기화할 수 있습니다. 또한 setTimeout을 사용하여 이전 작업이 완료된 후에 다음 작업을 예약하는 방법도 고려할 수 있습니다.

시간을 보장해야하는 타이머의 경우, 어떻게 해야하는가?

function doTask() {
// 작업을 실행하는 코드
setTimeout(doTask, 1000); // 1초 후에 다시 실행
}

// 초기 실행
doTask();

딜레이 시간의 정확성이 중요한 경우, setInterval 대신 setTimeout을 사용하여 타이머를 재귀적으로 설정하는 방식을 고려할 수 있습니다. 이렇게 하면 이전 작업이 완료된 후에 다음 작업을 예약하므로 딜레이 시간의 정확성이 높아집니다.

예를 들어, 아래와 같이 setTimeout을 사용하여 일정한 간격으로 작업을 수행하는 타이머를 만들 수 있습니다

이렇게 하면 각 작업은 이전 작업이 완료된 후 1초 후에 실행되므로 딜레이 시간을 보다 정확하게 조절할 수 있습니다.