Window.performance.now() эквивалентен в nodejs?
Я думаю, что вопрос прямолинейный.
Я ищу что-то похожее на window.performance.now() в узле v8 engine.sysjs.
Сейчас я просто использую: -
var now = Date.now();
//do some processing..
console.log("time elapsed:", Date.now() - now);
Но я читал, что window.performance.now() намного точнее, чем использование даты из-за того, что определено здесь.
Ответы
Ответ 1
Я хотел бы только упомянуть, что три из причин, по которым автор приводит предпочтение API синхронизации в браузере, похоже, не относятся непосредственно к ситуации с узлами, а четвертая, неточность времени Javscript, цитирует статью 2008 года: и я бы настоятельно рекомендовал не полагаться на более старые материалы, касающиеся специфики производительности Javascript, особенно с учетом недавнего раунда улучшений производительности, которые были сделаны всеми механизмами для поддержки приложений "HTML5".
Однако, в ответ на ваш вопрос, вы должны посмотреть на process.hrtime()
ОБНОВЛЕНИЕ: present
пакет (доступный через npm install present
) предоставляет немного сахара около hrtime
если хотите.
Ответ 2
Node v8.5.0 добавил API синхронизации производительности, который включает performance#now()
, например
const {
performance
} = require('perf_hooks');
console.log('performance', performance.now());
Ответ 3
Вот ярлык для process.hrtime()
, который возвращает миллисекунды вместо микросекунд:
function clock(start) {
if ( !start ) return process.hrtime();
var end = process.hrtime(start);
return Math.round((end[0]*1000) + (end[1]/1000000));
}
Использование:
var start = clock();
// do some processing that takes time
var duration = clock(start);
console.log("Took "+duration+"ms");
Выведет что-то вроде "Took 200ms"
Ответ 4
Как насчет?
console.time('FooTimer');
// do the work
console.timeEnd('FooTimer');
Ответ 5
Здесь версия Typescript с process.hrtime() на основе NextLocal ответ:
class Benchmark {
private start = process.hrtime();
public elapsed(): number {
const end = process.hrtime(this.start);
return Math.round((end[0] * 1000) + (end[1] / 1000000));
}
}
export = Benchmark;
Использование:
import Benchmark = require("./benchmark");
const benchmark = new Benchmark();
console.log(benchmark.elapsed());
Ответ 6
Подводя итог и избегая использования perf_hooks
const performance = {
now: function(start) {
if ( !start ) return process.hrtime();
var end = process.hrtime(start);
return Math.round((end[0]*1000) + (end[1]/1000000));
}
}
console.log('performance', performance.now());