Node.js에서 가장 정확한 타임 스탬프를 얻으려면 어떻게해야합니까?
추신 내 Node.js 버전은 0.8.X이고 node-microtime 확장 이 작동하지 않습니다 (설치시 충돌).
답변
new Date().getTime()
? 이는 JS가 제공하는 가장 정확한 타임 스탬프 (밀리 초)를 제공합니다.
업데이트 : vaughan이 언급했듯이 process.hrtime()
Node.js 내에서 사용할 수 있습니다. 해상도는 나노초이므로 훨씬 더 높기 때문에 더 정확해야한다는 의미는 아닙니다.
추신 : 더 명확하게하기 위해 [초, 나노초] 내에 현재 고해상도 실시간이 포함 process.hrtime()
된 튜플 Array
을 반환합니다 .
답변
Node.js에서 “고해상도 시간”은 process.hrtime
. 첫 번째 요소는 초 단위로, 두 번째 요소는 나머지 나노초로 배열을 반환합니다.
현재 시간 (마이크로 초)을 얻으려면 다음을 수행하십시오.
var hrTime = process.hrtime()
console.log(hrTime[0] * 1000000 + hrTime[1] / 1000)
( 위 변환에서 오류를 지적 해 주신 itaifrenkel 에게 감사드립니다 .)
최신 브라우저에서 마이크로 초 정밀도의 시간은 performance.now
. 문서는 https://developer.mozilla.org/en-US/docs/Web/API/Performance/now 를 참조 하십시오 .
저는 Node.js를 기반으로이 함수를 구현했습니다.이 함수 process.hrtime
는 프로그램에서 두 지점 간의 시간 차이를 계산하려는 경우 상대적으로 사용하기가 비교적 어렵습니다. http://npmjs.org/package/performance-now를 참조 하십시오 . 사양에 따라이 함수는 밀리 초 단위로 시간을보고하지만 밀리 초 미만의 정밀도를 가진 부동 소수점입니다.
이 모듈의 버전 2.0에서보고 된 밀리 초는 노드 프로세스가 시작된시기 ( Date.now() - (process.uptime() * 1000)
)에 상대적 입니다. 와 유사한 타임 스탬프를 원하는 경우 결과에 추가해야합니다 Date.now()
. 또한 다시 계산해야합니다 Date.now() - (process.uptime() * 1000)
. 모두 Date.now
하고 process.uptime
정확한 측정을 위해 매우 신뢰할 수 있습니다.
마이크로 초 단위로 현재 시간을 얻으려면 다음과 같이 사용할 수 있습니다.
var loadTimeInMS = Date.now()
var performanceNow = require("performance-now")
console.log((loadTimeInMS + performanceNow()) * 1000)
참고 항목 : JavaScript는 고해상도 타이머를 제공합니까?
답변
now('milli'); // 120335360.999686
now('micro') ; // 120335360966.583
now('nano') ; // 120335360904333
알려진 now
것은 :
const now = (unit) => {
const hrTime = process.hrtime();
switch (unit) {
case 'milli':
return hrTime[0] * 1000 + hrTime[1] / 1000000;
case 'micro':
return hrTime[0] * 1000000 + hrTime[1] / 1000;
case 'nano':
return hrTime[0] * 1000000000 + hrTime[1];
default:
return now('nano');
}
};
답변
BigInt
데이터 형식은 Node.js를 10.7.0부터 지원됩니다. ( 또한 참조 블로그 포스트 발표 ). 이러한 지원되는 Node.js 버전의 경우이 process.hrtime([time])
메서드는 이제 ‘레거시’로 간주되고 process.hrtime.bigint()
메서드 로 대체됩니다 .
.NET Framework에서 현재 고해상도 실시간을 반환
bigint
하는process.hrtime()
메서드 의 버전입니다bigint
.
const start = process.hrtime.bigint();
// 191051479007711n
setTimeout(() => {
const end = process.hrtime.bigint();
// 191052633396993n
console.log(`Benchmark took ${end - start} nanoseconds`);
// Benchmark took 1154389282 nanoseconds
}, 1000);
tl; dr
- Node.js 10.7.0+-사용
process.hrtime.bigint()
- 그렇지 않으면-사용
process.hrtime()
답변
https://github.com/wadey/node-microtime 도 있습니다 .
> var microtime = require('microtime')
> microtime.now()
1297448895297028
답변
답변
보다 정밀도가 Date.now()
높지만 float 정밀도의 밀리 초 를 사용하려면 다음을 수행하십시오 .
function getTimeMSFloat() {
var hrtime = process.hrtime();
return ( hrtime[0] * 1000000 + hrtime[1] / 1000 ) / 1000;
}