Frage

Ich bin Geschwindigkeit testet einige JavaScript-Programme durch ein Date-Objekt erstellen und verwenden sie die Zeit in Millisekunden vor und nach der eigentlichen Arbeit der Funktion zu erhalten. Ich habe den Körper für eine einfache Schleife Zugabe, und dann wird das Ende der alten ms aus den neuen ms subtrahiert und das Bedrucken. Allerdings endet alles in Millisekunden 0 ... was Sinn als die Zeit macht, wenn ich es mit einem Schreib überprüfen, ist das gleiche vor und nach der Arbeit. Bin ich es richtig, und JavaScript (in Chrom) zu tun ist blitzschnell, oder ist etwas hinter den Kulissen Sachen gibt, die meine Variablen vermasseln.

War es hilfreich?

Lösung

Während das Date-Objekt Zeiten in Millisekunden zurück, das ist nicht wirklich die Auflösung des Timers dahinter. Als Beispiel könnte die Timer-Tick über einmal alle 10 ms. Wenn nur Ihren Prozess 3 ms dauert, dann werden Sie nicht die meiste Zeit eine von Null verschiedene Mess sehen (und manchmal werden Sie 10 ms sehen).

Die Lösung ist Ihre Funktion viele Male, und die Zeit die ganze Sache zu laufen. Beispielsweise führen sie eine Million Mal und teilen sich die Gesamtzeit von 1000000 die durchschnittliche Zeit von einem Lauf zu erhalten.

Andere Tipps

Sehen Sie mein Antwort auf diese Frage , wie Sie einige einfache Benchmark-Vergleiche implementieren könnte. Wie @ Greg Hewgill darauf hingewiesen, es ist wichtig, läuft mehrere Male des Tests eine genaue Darstellung, wie lange ein bestimmte Test prüft tatsächlich zu erhalten.

Normalerweise es läuft darauf hinaus, etwas so einfach wie:

var MAX = 100000, i =  0, 
    s   = null,   e = null;

console.info("`someMethodToTest()` over %d iterations", MAX);
s = new Date();
do {
    someMethodToTest();
} while ( ++i < MAX );
e = new Date();

console.log("Total: %dms; average: %dms", +e - +s, (+e - +s) / MAX);

Wir würden wirklich Code benötigen, um zu sehen. Wie auch immer, ein möglicher Grund für die Null ist, dass Ihre Schleife asynchron ausgeführt wird: der Dolmetscher nicht bis zum Ende der Schleife nicht warten, bevor Sie den nächsten Befehl zu springen. Oder natürlich können Sie Ihre Schleife nur blitzschnell sein.

BTW, können Sie sich mit einem JavaScript-Profiler interessiert. Firebug für Firefox hat eine schöne ein. Sie müssen nur die Konsole öffnen und drücken Sie Profil .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top