window.performance.now () äquivalent in nodejs?

77

Ich denke, die Frage ist einfach.

Ich suche nach etwas, das window.performance.now () in der V8-Engine von nodejs ähnelt.

Im Moment benutze ich nur: -

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

Ich habe jedoch gelesen, dass window.performance.now () aufgrund der hier definierten Daten viel genauer ist als die Verwendung des Datums .

Schrei
quelle

Antworten:

50

Ich möchte nur erwähnen, dass drei der Gründe, die der Autor für die Bevorzugung der Timing-API im Browser angibt, nicht direkt auf eine Knotensituation zutreffen, und der vierte, die Ungenauigkeit der Javscript-Zeit, zitiert einen Artikel aus dem Jahr 2008. und ich würde dringend davor warnen, sich in Bezug auf die Leistungsspezifikationen von Javascript auf älteres Material zu verlassen, insbesondere angesichts der jüngsten Runde von Leistungsverbesserungen, die alle Engines zur Unterstützung von "HTML5" -Apps vorgenommen haben.

Als Antwort auf Ihre Frage sollten Sie sich jedoch ansehen process.hrtime()

UPDATE: Das presentPaket (erhältlich über npm install present) enthält etwas Zucker, hrtimewenn Sie es möchten.

Hinweis: Seit der Version 8.5.0 von Node können Sie performance.now () verwenden.

Barry-Johnson
quelle
Ja, das ist genau das, was ich brauche. Vielen Dank. Ich werde auch einen Blick darauf werfen present.
Schrei
Es gibt auch die entsprechend benannte npmjs.com/package/performance-now
Der Hochstapler
Welcher Autor? Bitte geben Sie den Kontext in Ihrer Antwort an.
Edward D'Souza
1
Der Autor des Links, der in der ursprünglichen Frage gepostet wurde, ist offensichtlich. Die Frage ist der Kontext. Das Hinzufügen wäre eine Redundanz, kein Kontext.
Barry-Johnson
89

Node v8.5.0 hat die Performance Timing API hinzugefügt , die performance#now()z

const {
  performance
} = require('perf_hooks');

console.log('performance', performance.now());
Gajus
quelle
30

Hier ist eine Verknüpfung process.hrtime(), die Millisekunden anstelle von Mikrosekunden zurückgibt:

function clock(start) {
    if ( !start ) return process.hrtime();
    var end = process.hrtime(start);
    return Math.round((end[0]*1000) + (end[1]/1000000));
}

Verwendung:

var start = clock();
// do some processing that takes time
var duration = clock(start);
console.log("Took "+duration+"ms");

Gibt etwas wie "Took 200ms" aus

jaggedsoft
quelle
15

Wie wäre es mit?

console.time('FooTimer');
// do the work
console.timeEnd('FooTimer');
Tenbits
quelle
1
Passen Sie auf console.time () auf, wenn Sie Versprechen verwenden, warten usw. Das Paar time () / timeEnd () scheint mit dem globalen Status zu funktionieren. Wenn Sie dasselbe Tag parallel zeitlich festlegen, funktionieren die Dinge nicht richtig.
Geschoren
Das mag funktionieren, aber wenn Sie diese Zeit pragmatisch festhalten möchten, ist dies (process.hrtime ()) Ihre einzige andere "in Bearbeitung" -Methode. Sie könnten einen übergeordneten Prozess erstellen und stdout beobachten, aber das ist ein letzter Ausweg. EDIT: Oder es sieht so aus, als ob es die Performance Timing API in NodeJS ab 8.5+ gibt - Nodejs.org/api/…
Eric Hodonsky
1

Hier ist eine Typescript-Version mit process.hrtime () , basierend auf der Antwort von 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;

Verwendung:

import Benchmark = require("./benchmark");

const benchmark = new Benchmark();

console.log(benchmark.elapsed());
Erik Barke
quelle
1

Um es zusammenzufassen und zu vermeiden 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());
loretoparisi
quelle
1
Warum sollten wir vermeiden wollen perf_hooks?
Falscher
3
Da es aus Gründen der Abwärtskompatibilität in Node v8.5.0 hinzugefügt wurde, ist dies unter bestimmten Umständen möglicherweise erforderlich ...
loretoparisi
Vielen Dank für die Erklärung, macht Sinn!
Falscher