2017-03-17 4 views
2

우리는 두 이벤트의 시작 시간과 종료 시간을 가져옵니다 자바 스크립트 기능이 :NTP 시간 업데이트에서도 생존 할 수있는 방법으로 JavaScript로 두 번 비교할 수 있습니까?

var startTime = new Date().getTime(); 
// A long running task occurs 
var endTime = new Date().getTime(); 

우리가 찾아낸 문제가 getTime()는 시스템 클럭에 의존하는 것으로 보인다는 것이다. 불행히도 우리는 Windows NTP 시간 업데이트를 통해이 두 호출간에 사용자의 시계가 변경된 경우가 있습니다 (예 : Windows가 정확한 시간을 얻기 위해 시간 서버로 나가고 시스템 시계를 올바른 시간으로 변경 함).). 그래서 우리는이 같은 뭔가 바람 :

startTime = 12:00:00 
// 30 second task is kicked off 
// NTP time update detects that the system is one minute ahead and corrects the clock 
endTime = 11:59:30 // It ended before it began 

내가 NTP 시간 업데이트를 살아남을 것 같은 방법으로 두 번을 비교할 수있는 방법이 있나요? Google의 자바 스크립트 앱은 회사 방화벽 외부의 서버를 쿼리 할 수 ​​없으므로 NTP 서버를 직접 호출하는 것은 문제가되지 않습니다.

+2

이 아니에요 시간 성능을 측정하는 데 사용 (그 질문에 = 답변) 모든 기술은 NTP 업데이트에 무관이기 때문에 일반적인 성능 측정 질문의 중복! 그러나 http://stackoverflow.com/questions/313893/how-to-measure-time-taken-by-a-function-to-execute의 최고 정격 답변은 아직까지 갈 방법입니다. "[. ..]과 달리 Date.now()와 달리 Performance.now()가 반환하는 값은 시스템 시계 (NTP와 같은 소프트웨어에 의해 수동으로 조정되거나 비뚤어 질 수 있음)와 관계없이 항상 일정한 속도로 증가합니다. –

답변

0

청소부와 마찬가지로 : 나는 창문을 사용하지 않습니다. 내 지식은 수년 동안 유닉스 (-) 같은 컴퓨터에서 다양한 ntp 데몬입니다.

ntpd는 단계를 수행하는 일반적인 방법으로는 생각되지 않지만 시스템 시계의 속도를 늦추고 속도를 높이기로되어 있습니다. 한 걸음 더 나아가려면 기계가 꺼지기 시작하거나 골동품 시계가 있습니다 (아니면 그냥 진절머리 난 하드웨어 일뿐입니다).

이것은 일반적인 조건으로에서 을 의미합니다. ntpd는 timescale이 효과적으로 연속적이며 불연속성이 없는지 확인합니다 (조금 빠르거나 느릴 수도 있음). 시스템 시간과 UTC의 차이가 너무 커서 "단계"가 고려되고 실제로 시간이 거슬러 올라갈 수있는 경우에만 발생하지만 일반적으로 발생하면 기록 될 수 있습니다.

시스템 시간 단계로 인해 다양한 다른 문제가 발생할 수 있습니다. make는 혼란 스러울 수 있습니다.

최신 ntpd에는 단계 수행시기에 대한 임계 값을 구성하는 옵션이 있습니다.

솔루션 :

당신의 기계들이는 NTP의 단계를 수행하고, 그 반응한다는 로그인 어디 알아낼 수있다 (이 크로스 플랫폼을 쉽게 될 수 없습니다).

시스템 시간보다 다른 시간 측정을 사용하십시오.

모든 것을 피하려면 가장 좋은 방법입니다. 중요한 경우 시스템 시간에 의존하는 대신 공개 NTP 서버를 직접 쿼리하십시오.

당신이 그렇게 할 수는 없다 : http를 통해 신뢰할 수있는 시계가있는 서버 시간을 쿼리하십시오. NTP의 정확성을 얻는 것은 쉽지 않을 것입니다. 그러나 30 초 크기의 주문을 측정하는 경우 http (s)를 사용하여 도입 된 분산이 최소화 될 수 있습니다.

정확성이 정말로 필요한 경우 : HTTP를 통해 웹 서버에 NTP를 전송하고 NTP가 전송 지연을 처리하게하십시오. '조금'더 노력하지만, 필사적이라면 ...

자신의 회사 환경에서이 프로그램을 실행하면 자신 만의 ntp 서버를 쉽게 설정할 수 있습니다. 또한 선반 타임 서버를 구입할 수도 있습니다. google "Meinberg"를 시작하기 만하면됩니다. 물론 다른 사람들도 있습니다.) ntp를 사용하여 로컬 네트워크의 시간을 방송 할 수도 있습니다.

지금 : 응용 프로그램에서 경과 시간을 측정하려면 에 대해 약간 이상한 느낌이 들었습니다..

배경 정보 : http://doc.ntp.org/current-stable/ntpd.html