Как получить microtime в узле.Джей?
Как я могу получить наиболее точную отметку времени в узле.Джей?
ps моя версия узла.js - 0,8.X и node-microtime extension не работает для меня (сбой при установке)
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