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

2708voto

vsync Punkte 101339

Verwendung von leistung.jetzt() :

var startTime = performance.now()

doSomething()   // <---- measured code goes between startTime and endTime

var endTime = performance.now()

console.log(`Call to doSomething took ${endTime - startTime} milliseconds`)

En Node.js ist es erforderlich, die performance Klasse

Importleistung

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

Verwendung von console.time : ( Lebensstandard )

console.time('doSomething')

doSomething()   // <---- The function you're measuring time for 

console.timeEnd('doSomething')

Anmerkung:
Die Zeichenkette, die an die time() y timeEnd() Methoden müssen übereinstimmen
( damit der Timer wie erwartet abläuft ).

console.time() Dokumentationen:

37 Stimmen

Sie wird jetzt auch von den Chrome Developer Tools unterstützt.

4 Stimmen

Soweit ich weiß, ist dies derzeit der beste Weg, um genaue Zeitangaben zu erhalten.

8 Stimmen

Müssen Sie die Funktion nicht zwischen diesen beiden Anweisungen ausführen? Sie messen jetzt die Zeit, die für die Definition und nicht für die Ausführung der Funktion benötigt wird. Korrigieren Sie mich, wenn ich falsch liege...

707voto

Owen Punkte 79611

Utiliser neues Datum().getTime()

Die Methode getTime() gibt die Anzahl der Millisekunden seit Mitternacht des 1. Januar 1970 zurück.

ex.

var start = new Date().getTime();

for (i = 0; i < 50000; ++i) {
// do something
}

var end = new Date().getTime();
var time = end - start;
alert('Execution time: ' + time);

10 Stimmen

Beachten Sie, dass Sie den Aufruf von getTime() durch +new Date() ersetzen können: var start = +new Date(); // do stuff alert("Execution time: "+(+neues Datum())-start);

66 Stimmen

Die Zeitangaben sind nicht genau, da Date nicht für diese Funktion vorgesehen ist. Ich werde hier kühn sein und sagen, dass Sie das Beispiel von vsync verwenden sollten, wenn Sie ein genaues Timing wünschen. Obwohl es nur in Chrome und Firefox ATM funktioniert.

10 Stimmen

Achtung, getMilliseconds() gibt den Millisekundenanteil der aktuellen Sekunde an. Wenn Sie getTime() durch getMilliseconds() ersetzen, können Sie negative Ergebnisse erhalten, wenn Sie eine Sekunde überschreiten.

459voto

Pacerier Punkte 80774

Verwenden Sie Date() nicht. Lesen Sie unten.

Utilisez performance.now() :

<script>
var a = performance.now();
alert('do something...');
var b = performance.now();
alert('It took ' + (b - a) + ' ms.');
</script>

Es funktioniert auf:

  • IE 10 ++

  • FireFox 15 ++

  • Chrom 24 ++

  • Safari 8 ++

  • Oper 15 ++

  • Android 4.4 ++

  • usw. usw.

console.time kann lebensfähig sein für Sie aber es ist nicht standardisiert § :

Diese Funktion ist nicht standardisiert und befindet sich nicht auf dem Weg zu einer Norm. Verwenden Sie sie nicht auf Produktionsseiten, die dem Web zugewandt sind: Sie wird nicht für jeden Benutzer funktionieren. Hier kann es auch große Inkompatibilitäten zwischen Implementierungen geben und das Verhalten kann sich in Zukunft ändern.

Neben der Browserunterstützung, performance.now scheint die potenziell um genauere Zeitangaben zu machen, da es sich offenbar um die Basisversion von console.time .


<rant> Außerdem, Verwenden Sie NIEMALS Date para alles weil sie von Änderungen der "Systemzeit" beeinflusst wird. Das heißt, wir wird ungültige Ergebnisse - wie "negative Zeitmessung" - erhalten, wenn der Benutzer keine genaue Systemzeit hat:

Im Oktober 2014 ging meine Systemuhr kaputt und was erraten .... Ich öffnete Gmail und sah 何れも der E-Mails des Tages "gesendet vor 0 Minuten ". Und ich dachte, Gmail würde von Weltklasse-Ingenieuren von Google entwickelt werden.......

(Stellen Sie Ihre Systemuhr auf ein Jahr zurück und gehen Sie zu Gmail, damit wir uns alle kaputtlachen können. Vielleicht haben wir eines Tages ein Halle der Schande für JS Date .)

Google Spreadsheet's now() Funktion leidet ebenfalls unter diesem Problem.

Die einzige Zeit, in der Sie Folgendes verwenden werden Date ist, wenn Sie dem Benutzer zeigen wollen seine Systemuhrzeit. Nicht, wenn Sie die die Zeit oder etwas zu messen.

4 Stimmen

Genau das, wonach ich gesucht habe! Ich möchte mehrere Zeiten addieren können, was mit Konsolenzeiten nicht wirklich möglich ist.

10 Stimmen

Beachten Sie, dass dies in Safari noch nicht unterstützt wird: [developer.mozilla.org/de-US/docs/Web/API/Performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance.now())

3 Stimmen

Ich verwende Firebug Profile und performance.now(), und beide funktionieren gut. Performance.now() bestätigt mein Ergebnis aus Profile.

39voto

Varvara Kalinina Punkte 1963

Um genaue Werte zu erhalten, sollten Sie Leistungsschnittstelle . Es wird von den modernen Versionen von Firefox, Chrome, Opera und IE unterstützt. Hier ist ein Beispiel, wie es verwendet werden kann:

var performance = window.performance;
var t0 = performance.now();
doWork();
var t1 = performance.now();
console.log("Call to doWork took " + (t1 - t0) + " milliseconds.")

Date.getTime() ou console.time() sind nicht geeignet, um die genaue Ausführungszeit zu messen. Sie können sie verwenden, wenn eine schnelle grobe Schätzung für Sie in Ordnung ist. Mit grober Schätzung meine ich, dass Sie 15-60 ms Abweichung von der tatsächlichen Zeit erhalten können.

Prüfen Sie diese brillante Beitrag zur Messung der Ausführungszeit in JavaScript. Der Autor gibt auch einige lesenswerte Links zur Genauigkeit der JavaScript-Zeit an.

0 Stimmen

Dies funktioniert am besten, weil die akzeptierte Antwort Folgendes erfordert node.js und diese Antwort nicht. Zufälligerweise ist Ihre Gesamtpunktzahl 1,963 entspricht meinem Geburtsjahr!

0 Stimmen

@WinEunuuchs2Unix Leider ist Ihre Gesamtpunktzahl 1,382 bedeutet für mich nichts Besonderes. Mach es zu 1,991 und gib mir fünf :)

21voto

Stefan Mai Punkte 22433

Verwenden Sie Firebug und aktivieren Sie sowohl Konsole als auch Javascript. Klicken Sie auf Profil. Neu laden. Klicken Sie erneut auf Profil. Sehen Sie sich den Bericht an.

9 Stimmen

Ein guter Rat, der aber offensichtlich nur für FF gilt. Wir wollen oft Browser-Geschwindigkeiten vergleichen... :-)

4 Stimmen

Bei neuen Firebuq werden diese Optionen im Menü ausgeblendet, verwenden Sie CTRL + SHIFT + P oder console.profile(); console..profileEnd()

6 Stimmen

Chrome unterstützt console.time() y console.timeEnd() auch jetzt.

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