2014-11-27 2 views
4

브라우저 환경에서 setTimeoutsetInterval은 시간에 대한 민감도가 중요한 정확성에 대해 신뢰할 수 없습니다.웹 작업자 : SetInterval 및 SetTimeout 안정성

최근에 requestAnimationFrame이 주어 졌으므로 조금 더 개선 할 수 있습니다 (performance.now() 및 타임 스탬프).

긴 이야기 짧게 - 나는 자바 스크립트로 메트로놈을 만들기로 결정했다. 그리고 그것이 작동하는 동안 그것은 특정 템포 위에 상당히 부정확하다. 늦은 프레임을 보정하면 템포가 시간이 지남에 따라 비 동기화되지 않게되지만, 개별 비트는 약간 떨어져 메트로놈에서는 작동하지 않습니다. (본질적으로 이산 적이 지 않아도되는 애니메이션의 경우에는 문제가되지 않습니다.)

지금 당장은 내가 지정한 임계 값에 따라 미리보기를 수행하려고 시도 할 수있는 옵션이 있습니다. 사용 가능한 프레임 사이에 클릭을 놓으십시오 (애니메이션 루프에서 setTimeout 사용). 하지만 HTML5 Audio API가 밀리 초 단위로 재생을 지연시키지 않는 한 setTimeout은 이벤트 루프로 인해 브라우저에서 신뢰할 수없는 유사한 문제가 발생할 것이라고 생각합니다.

내 질문 : 웹 작업자와 브라우저 환경에서 setTimeoutsetInterval이보다 정확하고 신뢰할 수 있습니까?

+2

완벽한 타이밍을 얻는 유일한 방법은 오디오 API를 사용하는 것입니다. [시간 다루기 : 리듬을 사용하여 사운드 재생] 아래의 [이 기사] (http://www.html5rocks.com/en/tutorials/webaudio/intro/)에서 타이밍에 관한 섹션이 있습니다. – spender

+0

@spender 이봐, 그냥 말하고 싶었어. WebAudio는 실제로 매력처럼 작동했습니다 (무한 메트로놈 루프를 위해 일부 곡을 뛰어 넘은 후). 좋은 전화, 팁 주셔서 감사! –

답변

3

웹 작업자가 ui에 따라 백그라운드에서 실행되기 때문에 웹 작업자가 settimeout 및 setinterval 함수에 대해 신뢰할 수 있습니다. 따라서 사용자는 차단없는 UI 이벤트를 제공합니다 (메트로놈 템포에 영향을 미칠 수 있음) , 계속 메트로놈 타이밍을 처리하는 동안.

그런데 웹 작업자에 관한 좋은 문서가 here입니다.

관련 문제