相当于nodejs中的window.performance.now()?


77

我认为问题很直接。

我正在寻找与nodejs V8引擎中的window.performance.now()类似的东西。

现在我正在使用:-

var now = Date.now();
//do some processing..
console.log("time elapsed:", Date.now() - now);

但是,我读到window.performance.now()比使用日期更准确,因为这里定义了什么。

Answers:


50

我只想提一下,作者在浏览器中选择使用计时API的三个原因似乎并不直接适用于节点情况,第四个是Javscript时间的不准确性,引用了2008年的一篇文章,并且我强烈警告不要依赖旧版本的有关Javascript性能细节的资料,尤其是考虑到最近所有引擎对性能的改进都支持“ HTML5”应用程序。

但是,在回答您的问题时,您应该看一下 process.hrtime()

更新:present软件包(可通过访问npm install present)可根据需要提供一些糖hrtime

注意:Node的8.5.0版本开始,您可以使用performance.now()


是的,这就是我所需要的。谢谢。我也会看一看present
shriek 2014年


哪位作家 请在您的答案中包括上下文。
爱德华D'Souza

1
链接的作者显然是在原始问题中发布的。问题是上下文。添加它将是冗余,而不是上下文。
巴里·约翰逊(Barry-johnson)


30

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”的信息


15

关于什么?

console.time('FooTimer');
// do the work
console.timeEnd('FooTimer');

1
请注意console.time()(如果您使用的是Promise,await等)。time()/ timeEnd()对似乎可以在全局状态下工作-如果同时对同一标签进行计时,那么事情将无法正常进行。
Shorn

因此这可能会起作用,但是如果您希望务实地坚持该时间,那么(process.hrtime())是您唯一的“处理中”方法。您可以创建一个父进程并查看stdout,但这是不得已的方法。编辑:或者它看起来像有一个在中的NodeJS性能计时API为8.5+ - nodejs.org/api/...
埃里克Hodonsky

1

这是一个带有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());

1

总结一下,避免使用 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());

1
我们为什么要避免perf_hooks
虚假的

3
因为它是在Node v8.5.0中添加的,所以为了向后兼容,因此在某些情况下可能需要...
loretoparisi

非常感谢您的解释,很有道理!
虚假的

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.