Как получить microtime в узле.Джей?


Как я могу получить наиболее точную отметку времени в узле.Джей?

ps моя версия узла.js - 0,8.X и node-microtime extension не работает для меня (сбой при установке)

9 64

9 ответов:

new Date().getTime()? Это дает вам метку времени в миллисекундах, что является наиболее точным, что JS даст вам.

обновление: как заявил Воган, process.hrtime() доступно в узле.js-его разрешение составляет наносекунды и поэтому его намного выше, также это не означает, что он должен быть более точным.

PS.: Чтобы было понятнее,process.hrtime() возвращает кортеж Array содержит текущее Реальное время с высоким разрешением в [секундах, наносекундах]

В Узел.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 для документации.

я сделал реализацию этой функции для узла.js, на основе process.hrtime, который относительно трудно использовать, если вы хотите только вычислить разницу во времени между двумя точками в программе. Смотрите http://npmjs.org/package/performance-now . Согласно спецификации, эта функция показывает время в миллисекундах, но это поплавок с суб-миллисекунды точность.

в версии 2.0 этого модуля указанные миллисекунды относятся к моменту запуска процесса узла (Date.now() - (process.uptime() * 1000)). Вам нужно добавить это к результату, если вы хотите, чтобы временная метка была похожа на Date.now(). Также обратите внимание, что вы должны bever пересчитать 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 hrTime[0] * 1000000000 + hrTime[1];
  }

};

есть еще https://github.com/wadey/node-microtime:

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

узел.nanotimer Яш

Я написал библиотеку-оболочку / объект для узла.js на вершине process.hrtime вызов функции. Он имеет полезные функции, такие как синхронизация синхронных и асинхронных задач, указанных в секундах, миллисекундах, микро или даже нано, и следует синтаксису встроенного таймера javascript, чтобы быть знакомым.

объекты таймера также дискретны, поэтому вы можете иметь столько, сколько хотите, каждый со своим собственным setTimeout или

работать с большей точностью, чем Date.now(), но с точностью до миллисекунды с плавающей точкой:

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

существуют пакеты npm, которые привязываются к функции system gettimeofday() , который возвращает метку времени с точностью до микросекунды в Linux. Искать npm gettimeofday. Вызов C выполняется быстрее, чем process.hrtime()

переписать, чтобы помочь быстро понять:

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

лучше?

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