2011-08-04 2 views
6

안녕하세요 저는 자바 스크립트에서 스톱워치 유틸리티를 프로그래밍하고 있는데 효율성과 오버 헤드에 대한 질문이 있습니다. 스톱워치 제작을 고려한 두 가지 방법이 있습니다.효율적인 스톱워치

1.Store 시작 날짜와 그 날짜 이후의 밀리 초 수를 지속적으로 측정합니다.

2. 정수를 생성하고 설정된 간격으로 값을 증가시킵니다.

가장 효율적인 방법을 알고 싶습니다. 또한, 옵션 # 2가 매우 정확할 지 확신하지 못합니다. 누군가가이 정보를 입력하면 그 정보도 훌륭합니다.

+1

# 1은 '틱'사이의 시간을 보장 할 수 없으므로 # 2는 더 효율적이고 # 2는 작동하지 않습니다. – OverZealous

+0

'performance.now()'는 최신 브라우저 https://developer.mozilla.org/en-US/docs/Web/API/Performance/now –

답변

3

다른 사람들이 말한 것처럼 # 1로 가십시오. 각 초 (또는 분 또는 기타)를 틱하는 시계를 원할 경우 setTimeout을 적절한 시간이 지난 후 몇 ms 후에 호출하도록 다음 틱으로 시간을 예측해야합니다. 단지 두 번째 다음 전체 후에 실행 :

var d = new Date(); 
var interval = 1020 - d.getMilliseconds(); 
setTimeout(fn, interval); 

그 방법을 하나의 호출에 대한 실행이 바쁜 시스템에 의해 지연되는 경우, 다음 하나는 여전히 약 20ms의 다음 전체 초 후를 호출해야합니다.

+1

여전히 시간 초과가 누락 될 수 있습니다 (예 : 컴퓨터가 잠자기 상태가 됨). 필요한 것에 따라 타임 아웃 내의 델타가 여전히 필요합니다. –

+0

물론 브라우저의 모든 내용은 스크립트를 실행하는 브라우저에 따라 다릅니다. "제한 시간 안에 델타"란 무엇을 의미합니까? – RobG

+0

시계가 적시에 업데이트되도록하는 것에 대한 요점은 흥미 롭습니다. 그러나 이것이 없으면 시계가 디스플레이 뒤에있는 경우에도 적절한 시간을 표시합니다. 그렇지 않습니까? –

3

옵션 2는 정확하지 않습니다. 특히 다른 목적을 위해 추가 자바 스크립트가있는 페이지가있는 경우 특히 그렇습니다. 첫 번째 접근 방식으로 이동하십시오.

+0

에서 사용할 수 있습니다. 그러나 옵션 # 1을 사용하면 * 시계 변경 *을 사용해야합니다. 설명했다. 즉, 예상되는 변화와 실제 변화를 비교하여 (적절한 오차 범위 내에서) 비교하고 필요한 경우 수정해야합니다. 허락하신다면, 매우 중요한 사건입니다. –