我认为问题很直接。
我正在寻找与nodejs V8引擎中的window.performance.now()类似的东西。
现在我正在使用:-
var now = Date.now();
//do some processing..
console.log("time elapsed:", Date.now() - now);
但是,我读到window.performance.now()比使用日期更准确,因为这里定义了什么。
Answers:
我只想提一下,作者在浏览器中选择使用计时API的三个原因似乎并不直接适用于节点情况,第四个是Javscript时间的不准确性,引用了2008年的一篇文章,并且我强烈警告不要依赖旧版本的有关Javascript性能细节的资料,尤其是考虑到最近所有引擎对性能的改进都支持“ HTML5”应用程序。
但是,在回答您的问题时,您应该看一下 process.hrtime()
更新:present
软件包(可通过访问npm install present
)可根据需要提供一些糖hrtime
。
注意:从Node的8.5.0版本开始,您可以使用performance.now()
节点v8.5.0添加了Performance Timing API,其中包括performance#now()
,例如
const {
performance
} = require('perf_hooks');
console.log('performance', performance.now());
这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”的信息
关于什么?
console.time('FooTimer');
// do the work
console.timeEnd('FooTimer');
这是一个带有process.hrtime()的Typescript版本,基于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());
总结一下,避免使用 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());
perf_hooks
?
此方法在Node.js版本8.5.0中出现https://nodejs.org/api/perf_hooks.html#perf_hooks_performance_measurement_apis
present
。