• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    미해결

setInterval에 대해 질문이 있습니다.

21.09.06 00:33 작성 조회수 267

0

수업을 듣다가 궁금증이 생겨서 질문을 남깁니다.

setInterval같은 타이머 함수의 경우 2번째 인자로 1초를 전달해도 자바스크립트 엔진 특성상 정확하게 1초를 보장하지 않는 것으로 알고 있는데 정말 정확하게 하고 싶다면 어떻게 해야할지 궁금합니다!

Date()함수 같은 것을 이용해야하는 것일까요?

답변 1

답변을 작성해보세요.

0

1초를 보장하지는 않지만 브라우저를 일주일씩 켜놓지 않는 이상 큰 오차가 생기지는 않을 것 같은데요

그래도 더 정확하게 하고 싶다. 싶으시면 Date() 함수를 써주시면 됩니다.

지금 시간과 과거 시간을 비교해서 1초마다 setTimeout을 실행시켜주는 방법도 있고요.

requestAnimationFrame 을 이용해주는 방법도 있습니다.

let prevTime = new Date().getTime();

function render() {
	let ts = new Date().getTime();
    
	if (ts >= prevTime + 1000) {
	    prevTime = new Date().getTime();
       console.log(prevTime / 1000);
      //함수실행
    }
	
	requestAnimationFrame(render);
}

render();

requestAnimationFrame 은 뒤에서 설명이 나옵니다.