How to get a microtime in Node.js?

后端 未结 13 1173
情深已故
情深已故 2020-12-04 13:41

How can I get the most accurate time stamp in Node.js?

ps My version of Node.js is 0.8.X and the node-microtime extension doesn\'t work for me (crash on install)

相关标签:
13条回答
  • 2020-12-04 14:17

    There's also https://github.com/wadey/node-microtime:

    > var microtime = require('microtime')
    > microtime.now()
    1297448895297028
    
    0 讨论(0)
  • 2020-12-04 14:21

    In Node.js, "high resolution time" is made available via process.hrtime. It returns a array with first element the time in seconds, and second element the remaining nanoseconds.

    To get current time in microseconds, do the following:

    var hrTime = process.hrtime()
    console.log(hrTime[0] * 1000000 + hrTime[1] / 1000)
    

    (Thanks to itaifrenkel for pointing out an error in the conversion above.)

    In modern browsers, time with microsecond precision is available as performance.now. See https://developer.mozilla.org/en-US/docs/Web/API/Performance/now for documentation.

    I've made an implementation of this function for Node.js, based on process.hrtime, which is relatively difficult to use if your solely want to compute time differential between two points in a program. See http://npmjs.org/package/performance-now . Per the spec, this function reports time in milliseconds, but it's a float with sub-millisecond precision.

    In Version 2.0 of this module, the reported milliseconds are relative to when the node process was started (Date.now() - (process.uptime() * 1000)). You need to add that to the result if you want a timestamp similar to Date.now(). Also note that you should bever recompute Date.now() - (process.uptime() * 1000). Both Date.now and process.uptime are highly unreliable for precise measurements.

    To get current time in microseconds, you can use something like this.

    var loadTimeInMS = Date.now()
    var performanceNow = require("performance-now")
    console.log((loadTimeInMS + performanceNow()) * 1000)
    

    See also: Does JavaScript provide a high resolution timer?

    0 讨论(0)
  • 2020-12-04 14:21

    The BigInt data type is supported since Node.js 10.7.0. (see also the blog post announcement). For these supported versions of Node.js, the process.hrtime([time]) method is now regarded as 'legacy', replaced by the process.hrtime.bigint() method.

    The bigint version of the process.hrtime() method returning the current high-resolution real time in 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

    • Node.js 10.7.0+ - Use process.hrtime.bigint()
    • Otherwise - Use process.hrtime()
    0 讨论(0)
  • better?

    Number(process.hrtime().join(''))
    
    0 讨论(0)
  • 2020-12-04 14:25
    now('milli'); //  120335360.999686
    now('micro') ; // 120335360966.583
    now('nano') ; //  120335360904333
    

    Known that now is :

    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');
      }
    
    };
    
    0 讨论(0)
  • 2020-12-04 14:25

    process.hrtime() not give current ts.

    This should work.

     const loadNs       = process.hrtime(),
            loadMs       = new Date().getTime(),
            diffNs       = process.hrtime(loadNs),
            microSeconds = (loadMs * 1e6) + (diffNs[0] * 1e9) + diffNs[1]
    
      console.log(microSeconds / 1e3)
    
    0 讨论(0)
提交回复
热议问题