1733 Stimmen

Messung der Zeit, die eine Funktion zur Ausführung benötigt

Ich benötige die Ausführungszeit in Millisekunden.

Ursprünglich hatte ich diese Frage bereits im Jahr 2008 gestellt. Die akzeptierte Antwort lautete damals new Date().getTime() Wir sind uns jedoch alle einig, dass die Verwendung der Standard performance.now() API ist besser geeignet. Ich ändere daher die akzeptierte Antwort in diese.

5 Stimmen

Oftmals kann eine Aussage darüber, was Sie mit der Ausführungszeit erreichen wollen, weitaus nützlicher sein als die Beantwortung der Frage allein. Heutzutage ist die Verwendung von Profiling in Firebug oder Chrome Dev-Tools oft ein viel besserer Weg, um den Code zu finden, der Ihren CPU-Saft aufsaugt.

16 Stimmen

performance.now() funktioniert nicht in Node. new Date().getTime() wird in Node funktionieren.

2 Stimmen

@RyanWalker oder noch einfacher Date.now() Es funktioniert auch in Knoten

6voto

Mx. Punkte 3295

Seit console.time y performance.now in einigen wichtigen Browsern (z. B. IE10) nicht unterstützt werden, habe ich ein schlankes Dienstprogramm erstellt, das die besten verfügbaren Methoden nutzt. Es fehlt jedoch eine Fehlerbehandlung für falsche Verwendungen (Aufruf von End() bei einem nicht initialisierten Timer).

Verwenden und verbessern Sie es nach Belieben.

Performance: {
    Timer: {},
    Start: function (name) {
        if (console && console.time) {
            console.time(name);
        } else if (window.performance.now) {
            this.Timer[name] = window.performance.now();
        } else {
            this.Timer[name] = new Date().getTime();
        }
    },
    End: function (name) {
        if (console && console.time) {
            console.timeEnd(name);
        } else {
            var result;
            if (window.performance.now) {
                result = window.performance.now() - this.Timer[name];
            } else {
                result = new Date().getTime() - this.Timer[name];
            }
            console.log(name + ": " + result);
        }
    }
}

5voto

Vor ein paar Monaten habe ich meine eigene Routine zusammengestellt, die eine Funktion mit Date.now() zeitgesteuert ausführt - obwohl zu diesem Zeitpunkt die akzeptierte Methode performance.now() zu sein schien. weil das Performance-Objekt in der stabilen Node.js-Version noch nicht verfügbar (eingebaut) ist.

Heute habe ich weitere Nachforschungen angestellt und eine andere Methode zur Zeitmessung gefunden. Da ich auch herausgefunden habe, wie man diese in Node.js-Code verwenden kann, dachte ich, ich würde sie hier teilen.

Die folgenden Angaben sind aus den Beispielen von w3c y Node.js :

function functionTimer() {
    performance.mark('start')
    functionToBeTimed()
    performance.mark('end')
    performance.measure('Start to End', 'start', 'end')
    const measure = performance.getEntriesByName('Start to End')[0]
    console.log(measure.duration)
}

HINWEIS:

Wenn Sie beabsichtigen, die performance Objekt in einer Node.js-App zu verwenden, müssen Sie das folgende require einfügen: const { performance } = require('perf_hooks')

0 Stimmen

Ich denke, Sie brauchen keine performance.mark('end') in diesem Fall

0 Stimmen

Dokumentation: APIs zur Leistungsmessung .

4voto

Andrew Marin Punkte 973

Danke, Achim Koellner, ich werde Ihre Antwort noch ein wenig erweitern:

var t0 = process.hrtime();
//Start of code to measure

//End of code
var timeInMilliseconds = process.hrtime(t0)[1]/1000000; // dividing by 1000000 gives milliseconds from nanoseconds

Bitte beachten Sie, dass Sie nichts anderes tun sollten als das, was Sie messen wollen (z.B., console.log benötigt ebenfalls Zeit für die Ausführung und beeinträchtigt die Leistungstests).

Beachten Sie, dass Sie zur Messung der Ausführungszeit von asynchronen Funktionen Folgendes einfügen sollten var timeInMilliseconds = process.hrtime(t0)[1]/1000000; innerhalb des Rückrufs. Zum Beispiel,

var t0 = process.hrtime();
someAsyncFunction(function(err, results) {
var timeInMilliseconds = process.hrtime(t0)[1]/1000000;

});

3voto

iCPSoni Punkte 91

Mit Leistung

NodeJs: Es ist erforderlich, die Performance-Klasse zu importieren

var time0 = performance.now(); // Store the time at this point into time0

yourFunction();   // The function you're measuring time for 

var time1 = performance.now(); // Store the time at this point into time1

console.log("youFunction took " + (time1 - time0) + " milliseconds to execute");

Verwendung von console.time

console.time('someFunction');

someFunction(); // Whatever is timed goes between the two "console.time"

console.timeEnd('someFunction');

3voto

aryan singh Punkte 176

Utilisez console.time('some label here') vor der Funktion und console.timeEnd('some label here') nach der Funktion. Sie erhalten dann die Laufzeit der Funktion.

0 Stimmen

Ich habe dafür gestimmt, aber das ist vor allem nur für sehr lange/langsame Funktionen nützlich :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X