목차
정확한 JavaScript 타이머 만들기
setInterval/setTimeout의 부정확성
날짜 개체를 사용한 정확한 타이밍
자체 조정 타이머
웹 프론트엔드 JS 튜토리얼 표류를 방지하는 정확한 JavaScript 타이머를 어떻게 만들 수 있습니까?

표류를 방지하는 정확한 JavaScript 타이머를 어떻게 만들 수 있습니까?

Dec 14, 2024 pm 04:01 PM

How Can I Create Accurate JavaScript Timers That Avoid Drifting?

정확한 JavaScript 타이머 만들기

타이머는 작업 예약 및 실시간 기능 구현을 위해 JavaScript에서 중요한 역할을 합니다. 그러나 JavaScript 실행의 비동기적 특성으로 인해 타이머의 정확성을 보장하는 것이 어려울 수 있습니다.

setInterval/setTimeout의 부정확성

제공하신 코드 조각은 setInterval 함수를 활용하여 매 시간마다 카운터를 증가시킵니다. 두번째. 그러나 3600초 후에 카운터가 약 3500초에만 도달한 것을 관찰했습니다. 이는 setInterval 및 setTimeout이 본질적으로 정확하지 않기 때문입니다. 시간이 지남에 따라 지연되거나 표류하는 경향이 있습니다.

날짜 개체를 사용한 정확한 타이밍

정확한 타이머를 생성하려면 대신 날짜 개체를 사용하는 것이 좋습니다. Date 객체를 사용하면 밀리초 단위의 정밀도로 현재 시간을 얻을 수 있습니다. 다음과 같이 현재 시간과 시작 시간의 차이를 기반으로 타이머 논리를 설정할 수 있습니다.

var start = Date.now();
setInterval(function() {
    var delta = Date.now() - start; // milliseconds elapsed since start
    ...
    output(Math.floor(delta / 1000)); // in seconds
}, 1000); // update about every second
로그인 후 복사

자체 조정 타이머

드리프트 없이 일정한 간격이 필요한 타이머 애플리케이션의 경우 , 자체 조정 타이머가 더 나은 옵션입니다. 실제 경과 시간을 기준으로 시간 초과 간의 지연을 동적으로 조정합니다. 이 접근 방식을 사용하면 타이머가 제대로 작동하도록 보장됩니다.

var interval = 1000; // ms
var expected = Date.now() + interval;
setTimeout(step, interval);
function step() {
    var dt = Date.now() - expected; // the drift (positive for overshooting)
    ... // do what is to be done
    expected += interval;
    setTimeout(step, Math.max(0, interval - dt)); // take into account drift
}
로그인 후 복사

위 내용은 표류를 방지하는 정확한 JavaScript 타이머를 어떻게 만들 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

JavaScript로 문자열 문자를 교체하십시오 JavaScript로 문자열 문자를 교체하십시오 Mar 11, 2025 am 12:07 AM

JavaScript로 문자열 문자를 교체하십시오

jQuery는 요소 패딩/마진을 얻습니다 jQuery는 요소 패딩/마진을 얻습니다 Mar 01, 2025 am 08:53 AM

jQuery는 요소 패딩/마진을 얻습니다

jQuery 날짜가 유효한지 확인하십시오 jQuery 날짜가 유효한지 확인하십시오 Mar 01, 2025 am 08:51 AM

jQuery 날짜가 유효한지 확인하십시오

10 JQuery Accordions 탭 10 JQuery Accordions 탭 Mar 01, 2025 am 01:34 AM

10 JQuery Accordions 탭

10 JQuery 플러그인을 확인할 가치가 있습니다 10 JQuery 플러그인을 확인할 가치가 있습니다 Mar 01, 2025 am 01:29 AM

10 JQuery 플러그인을 확인할 가치가 있습니다

노드 및 HTTP 콘솔로 HTTP 디버깅 노드 및 HTTP 콘솔로 HTTP 디버깅 Mar 01, 2025 am 01:37 AM

노드 및 HTTP 콘솔로 HTTP 디버깅

사용자 정의 Google 검색 API 설정 자습서 사용자 정의 Google 검색 API 설정 자습서 Mar 04, 2025 am 01:06 AM

사용자 정의 Google 검색 API 설정 자습서

jQuery div에 스크롤 바를 추가합니다 jQuery div에 스크롤 바를 추가합니다 Mar 01, 2025 am 01:30 AM

jQuery div에 스크롤 바를 추가합니다

See all articles