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

11voto

Rohit Jaiswal Punkte 229

Es gibt mehrere Möglichkeiten, dieses Ziel zu erreichen:

  1. mit console.time

    console.time('function');
    //run the function in between these two lines for that you need to 
    //measure time taken by the function. ("ex. function();")
    console.timeEnd('function');
  2. Dies ist der effizienteste Weg: mit performance.now() z.B.

    var v1 = performance.now();
    //run the function here for which you have top measure the time 
    var v2 = performance.now();
    console.log("total time  taken = "+(v2-v1)+"milliseconds");
  3. +(Additionsoperator) oder getTime() verwenden

    var h2 = +new Date(); //or
    var h2 = new Date().getTime();
    for(i=0;i<500;i++) { /* do something */}
    var h3 = +new Date();   //or 
    var h3 = new Date().getTime();
    var timeTaken = h3-h2;
    console.log("time ====", timeTaken);

So sieht es aus, wenn Sie den unären Plus-Operator auf eine Date-Instanz anwenden: Sie erhalten den Wert der betreffenden Datumsinstanz Konvertiere ihn in eine Zahl

HINWEIS: getTime() eine bessere Leistung als der unäre Operator +.

10voto

Levi Roberts Punkte 1208

Um den Code von vsync weiter zu erweitern und die Möglichkeit zu haben, timeEnd als Wert in NodeJS zurückzugeben, verwenden Sie dieses kleine Stück Code.

console.timeEndValue = function(label) { // Add console.timeEndValue, to add a return value
   var time = this._times[label];
   if (!time) {
     throw new Error('No such label: ' + label);
   }
   var duration = Date.now() - time;
   return duration;
};

Verwenden Sie den Code nun wie folgt:

console.time('someFunction timer');

someFunction();

var executionTime = console.timeEndValue('someFunction timer');
console.log("The execution time is " + executionTime);

Dadurch haben Sie mehr Möglichkeiten. Sie können die Ausführungszeit speichern, um sie für weitere Zwecke zu verwenden, z. B. in Gleichungen, in einer Datenbank speichern, über Websockets an einen entfernten Client senden, auf einer Webseite bereitstellen usw.

7voto

Vijay Punkte 118

Verwenden Sie dieses Code-Format

const startTime =new Date().getTime();

//do something 
const endTime = new Date().getTime();
console.log(`time taken ${(endTime - startTime)/1000} seconds`);

7voto

aljgom Punkte 6035

Dies ist eine Timer-Funktion . Wenn Sie die Zeit zwischen mehreren, nicht verschachtelten Dingen messen wollen:

function timer(lap){ 
    if(lap) console.log(`${lap} in: ${(performance.now()-timer.prev).toFixed(3)}ms`); 
    timer.prev = performance.now();
}

Ähnlich wie console.time() aber einfacher zu benutzen, wenn man nicht die Übersicht über frühere Zeitgeber behalten muss.


Verwendung:

timer()              // set the start
// do something 
timer('built')       // logs 'built in: 591.815ms'
// do something
timer('copied')      // logs 'copied in: 0.065ms'
// do something
timer('compared')    // logs 'compared in: 36.41ms'

Wenn Sie die blaue Farbe von console.time() können Sie stattdessen diese Zeile verwenden

console.log(`${lap} in: %c${(performance.now()-timer.prev).toFixed(3)}ms`, 'color:blue');

0 Stimmen

Achtung! Für NodeJS müssen Sie importieren performance : const { performance } = require('perf_hooks');

7voto

Wajeeh Aslam Punkte 71

Das kann Ihnen helfen.

var t0 = date.now(); doSomething(); var t1 = date.now(); console.log("Call to doSomething took approximate" + (t1 - t0)/1000 + " seconds.")

3 Stimmen

Dieser Codeschnipsel kann die Frage zwar lösen, einschließlich einer Erläuterung trägt wirklich dazu bei, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für künftige Leserinnen und Leser beantworten, die die Gründe für Ihren Code-Vorschlag möglicherweise nicht kennen. Versuchen Sie bitte auch, Ihren Code nicht mit erklärenden Kommentaren zu überfrachten, das verringert die Lesbarkeit sowohl des Codes als auch der Erklärungen!

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