programing

Node.js에서 마이크로타임을 얻는 방법은 무엇입니까?

codeshow 2023. 8. 5. 11:08
반응형

Node.js에서 마이크로타임을 얻는 방법은 무엇입니까?

Node.js에서 가장 정확한 타임스탬프를 얻으려면 어떻게 해야 합니까?

ps 내 Node.js 버전은 0.8.X이며 노드 마이크로타임 확장이 작동하지 않습니다(설치 시 충돌).

Node.js에서 "고해상도 시간"은 를 통해 사용할 수 있습니다.첫 번째 요소가 시간(초)이고 두 번째 요소가 나머지 나노초인 배열을 반환합니다.

현재 시간을 마이크로초 단위로 가져오려면 다음을 수행합니다.

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를 으로 Node.js에 이 를 구현했습니다.process.hrtime프로그램의 두 점 사이의 시간 차이만 계산하려는 경우에는 상대적으로 사용하기가 어렵습니다.http://npmjs.org/package/performance-now 참조하십시오. 사양에 따라 이 함수는 시간을 밀리초 단위로 보고하지만 밀리초 미만의 정밀도를 가진 부동 소수점입니다.

모듈의 2에 대한 입니다(" " 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)

참고 항목:자바스크립트는 고해상도 타이머를 제공합니까?

노드 v10 이상: 사용해야 합니다.process.hrtime.bigint()배열이 아닌 단일 BigInt 번호를 생성합니다.process.hrtime() "표었습되니다시legacy로다▁"니"로 표시되었습니다.

노드 v10보다 이전 버전: vaugan이 언급한 바와 같이,process.hrtime()Node.js 내에서 사용할 수 있습니다. 분해능은 나노초이므로 훨씬 높습니다. 이 함 배 반 다 니 합 수환 합니다.[seconds, nanoseconds]에는 현재 실시간 고해상도 값이 포함되어 있지만 특정 클럭에 연결되어 있지 않습니다. 즉, 두 개의 연속된 값의 차이는 시간 경과 정도를 알려주지만 개별 값은 의미가 없습니다.

기타 JS 환경:new Date().getTime()밀리초 단위의 타임스탬프가 제공됩니다.업데이트:

now('milli'); //  120335360.999686
now('micro') ; // 120335360966.583
now('nano') ; //  120335360904333

▁that음있으로 알려져 있음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':
    default:
      return hrTime[0] * 1000000000 + hrTime[1];
  }
  
};

데이터 유형은 Node.js 10.7.0 이후에 지원됩니다(블로그 게시물 공지 참조).이러한 지원되는 Node.js 버전의 경우 이 메서드는 이제 '레거시'로 간주되며, 이 메서드로 대체됩니다.

bigintprocess.hrtime()현재 고해상도 실시간을 a로 반환하는 방법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

  • 10 - .js 10.7.0+ 사용 - 사용process.hrtime.bigint()
  • 그렇지 않은 경우 - 사용process.hrtime()

https://github.com/wadey/node-microtime 도 있습니다.

> var microtime = require('microtime')
> microtime.now()
1297448895297028

NodeJS와 브라우저 모두에서 작동하는 성능 API를 사용할 수도 있습니다.

var start = performance.timing ?
    performance.timing.navigationStart :
    performance.timeOrigin;

var time = (performance.now() + start) * 1000;

성능 API는 값을 부동 소수점 숫자로 저장하며 분수는 마이크로초입니다.

Node.js 나노타이머

는 node.대한 를 node에 작성했습니다.js의 파일 이름은 브오다니리/젝트를작입니다.process.hrtime micro,nano로 의 타이밍과 기능을 을 잘 따릅니다.초, 밀리초, 마이크로 또는 나노 단위로 지정된 타이밍 동기 및 비동기 작업과 같은 유용한 기능이 있으며, 친숙하도록 내장된 Javascript 타이머의 구문을 따릅니다.

되어 있기 수 의 타머개체개원로만하가는수큼있습다니질다각개니입체고한유는체.setTimeout또는setInterval프로세스 실행 중

그것은 나노타이머라고 불립니다.확인해 보세요!

보다 정확하게 작업하려면Date.now()그러나 플로트 정밀도가 밀리초인 경우:

function getTimeMSFloat() {
    var hrtime = process.hrtime();
    return ( hrtime[0] * 1000000 + hrtime[1] / 1000 ) / 1000;
}

요즘 유일한 방법은 제3자에게 전화하는 것입니다.

  1. 컴파일된 함수가 C에 작성된 lib(언어는 중요하지 않으며, 요점은 OS syscall)입니다.직접 작성하거나 를 들어 https://www.npmjs.com/package/microtime (src https://github.com/wadey/node-microtime/blob/master/src/microtime.cc) )을 사용합니다.
  2. 다음을 사용하여 프로세스 생성date +%s%NLinux에서 즉시 작동합니다.requirerequire('child_process')를 합니다.exec을 사용하여 가능합니다..

참고: 프로세스.시간은 현재 시간에 관한 이 아닙니다.

이러한 시간은 과거의 임의 시간에 상대적이며 하루 중 시간과 관련이 없습니다.[https://www.geeksforgeeks.org/node-js-process-hrtime-method/ ]

편집:

아래의 jcubic 또는 Alexandr의 답변을 사용하십시오. https://stackoverflow.com/a/69870775/2550964 https://stackoverflow.com/a/72741299/2550964


이 솔루션이 자랑스럽지는 않지만 다음과 같은 방식으로 마이크로초 또는 나노초 단위의 타임스탬프를 가질 수 있습니다.

const microsecond = () => Number(Date.now() + String(process.hrtime()[1]).slice(3,6))
const nanosecond = () => Number(Date.now() + String(process.hrtime()[1]).slice(3))

// usage
microsecond() // return 1586878008997591
nanosecond()  // return 1586878009000645600

// Benchmark with 100 000 iterations
// Date.now: 7.758ms
// microsecond: 33.382ms
// nanosecond: 31.252ms

이해하기:

  • 이 솔루션은 node.js에서만 작동합니다.
  • 이것은 보다 약 3배에서 10배 느립니다.Date.now()
  • 이상하게도, 그것은 매우 정확해 보입니다, hrTime은 정확히 js 타임스탬프 눈금을 따르는 것 같습니다.
  • ▁you▁can있습수를 대체할 수 있습니다.Date.now()타고Number(new Date()) 단위로 .

편집:

여기서 콤마와 함께 마이크로초를 갖는 솔루션은 자바스크립트에 의해 기본적으로 숫자 버전이 반올림됩니다.따라서 매번 동일한 형식을 사용하려면 문자열 버전을 사용해야 합니다.

const microsecondWithCommaString = () => (Date.now() + '.' + String(process.hrtime()[1]).slice(3,7))
const microsecondWithComma = () => Number(Date.now() + '.' + String(process.hrtime()[1]).slice(3,7))

microsecondWithCommaString() // return "1586883629984.8997"
microsecondWithComma() // return 1586883629985.966

빠른 이해를 돕기 위한 재작성:

const hrtime = process.hrtime();     // [0] is seconds, [1] is nanoseconds

let nanoSeconds = (hrtime[0] * 1e9) + hrtime[1];    // 1 second is 1e9 nano seconds
console.log('nanoSeconds:  ' + nanoSeconds);
//nanoSeconds:  97760957504895

let microSeconds = parseInt(((hrtime[0] * 1e6) + (hrtime[1]) * 1e-3));
console.log('microSeconds: ' + microSeconds);
//microSeconds: 97760957504

let milliSeconds = parseInt(((hrtime[0] * 1e3) + (hrtime[1]) * 1e-6));
console.log('milliSeconds: ' + milliSeconds);
//milliSeconds: 97760957

출처: https://nodejs.org/api/process.html#process_process_hrtime_time

받기hrtime줄에 : " 줄에하나숫자로표시":

const begin = process.hrtime();
// ... Do the thing you want to measure
const nanoSeconds = process.hrtime(begin).reduce((sec, nano) => sec * 1e9 + nano)

Array.reduce인수가 첫 " 인 가 지 정 요 번 초 요 사 로 합 니 용 다 소 기 를 소 째 첫 배 되 면 니 다 합 ▁when 사 용 ▁as ' ▁will ▁the ▁use ,accumulator 치가를 할 수 . 누군가는 사용할 수 있습니다.0초기 값으로 그리고 이것도 작동할 것이지만, 왜 추가적인 것이.* 0.

Linux에서 마이크로초 단위의 정밀 타임스탬프를 반환하는 시스템 gettimeofday() 함수에 바인딩되는 npm 패키지가 있습니다. npm »gettimeofdayC를 호출하는 것이 다음보다 빠릅니다.process.hrtime()

과정.hrtime은 전류 t를 제공하지 않습니다.

이게 통할 겁니다.

 const loadNs       = process.hrtime(),
        loadMs       = new Date().getTime(),
        diffNs       = process.hrtime(loadNs),
        microSeconds = (loadMs * 1e6) + (diffNs[0] * 1e9) + diffNs[1]

  console.log(microSeconds / 1e3)

더 나은가요?

Number(process.hrtime().join(''))

언급URL : https://stackoverflow.com/questions/11725691/how-to-get-a-microtime-in-node-js

반응형