Gibt es ein Paket, mit dem ich JavaScript-Code vergleichen kann? Ich beziehe mich nicht auf Firebug und solche Tools.
Ich muss 2 verschiedene JavaScript-Funktionen vergleichen, die ich implementiert habe. Ich bin mit Perls Benchmark- Modul ( Benchmark.pm ) sehr vertraut und suche nach etwas Ähnlichem in JavaScript.
Ist der Schwerpunkt auf dem Benchmarking von JavaScript-Code über Bord gegangen? Kann ich mit dem Timing nur eines Durchgangs der Funktionen durchkommen?
javascript
benchmarking
Ionisches Walross
quelle
quelle
Antworten:
Nehmen Sie einfach mehrere Iterationen jeder Funktion vor. Eine Iteration wird wahrscheinlich nicht ausreichen, aber (je nachdem, wie komplex Ihre Funktionen sind) sollte irgendwo näher an 100 oder sogar 1.000 Iterationen die Arbeit erledigen.Firebug hat auch einen Profiler, wenn Sie sehen möchten, welche Teile Ihrer Funktion ihn verlangsamen.Bearbeiten: Für zukünftige Leser sollte die folgende Antwort, die JSPerf empfiehlt, die richtige Antwort sein. Ich würde meine löschen, aber ich kann nicht, weil sie vom OP ausgewählt wurde. Benchmarking ist viel mehr als nur das Ausführen vieler Iterationen, und JSPerf erledigt dies für Sie.
quelle
jsperf.com ist die Website zum Testen der JS-Leistung. Beginnen Sie dort. Wenn Sie ein Framework zum Ausführen Ihrer eigenen Tests über die Befehlszeile oder Skripte benötigen, verwenden Sie Benchmark.js , die Bibliothek, auf der jsperf.com basiert.
Hinweis: Jeder, der Javascript-Code testet, sollte sich über die Fallstricke von "Mikrobenchmarks" informieren (kleine Tests, die auf eine bestimmte Funktion oder Operation abzielen, anstatt komplexere Tests, die auf realen Codemustern basieren). Solche Tests können nützlich sein, sind jedoch aufgrund der Funktionsweise moderner JS-Laufzeiten anfällig für Ungenauigkeiten. Vyacheslav Egorovs Präsentation zu Leistung und Benchmarking ist sehenswert, um ein Gefühl für die Art der Probleme zu bekommen.
Bearbeiten: Verweise auf meine JSLitmus-Arbeit wurden entfernt, da sie einfach nicht mehr relevant oder nützlich ist.
quelle
Fügen Sie dem Mix einfach einen schnellen Timer hinzu, den jemand vielleicht nützlich findet:
Im Idealfall wird es in eine Klasse eingeordnet und nicht wie ich es zum Beispiel oben als global verwendet habe. Die Verwendung wäre ziemlich einfach:
quelle
performance.now()
anstelle vonDate()
developer.mozilla.org/en-US/docs/Web/API/Performance/nowEinfach einfach.
quelle
Ich habe diese einfache Implementierung von @musicfreaks Antwort verwendet. Es gibt keine Funktionen, aber es ist wirklich einfach zu bedienen. Dies
bench(function(){return 1/2;}, 10000, [], this)
wird 1/2 10.000 mal berechnet.quelle
Es ist wirklich schwer, anständige browserübergreifende Benchmarks zu schreiben. Das einfache Timing einer vordefinierten Anzahl von Iterationen Ihres Codes ist überhaupt nicht kugelsicher .
Schauen Sie sich, wie @broofa bereits vorgeschlagen hat, jsPerf an . Es verwendet Benchmark.js hinter den Kulissen.
quelle
Beachten Sie beim Schreiben eines benutzerdefinierten Benchmark-Skripts, dass einige Browser Dom-Manipulationen erst anwenden, nachdem die Funktion, in der sie definiert sind, beendet wurde. Weitere Details finden Sie hier http://www.quirksmode.org/blog/archives/2009/08/when_to_read_ou.html
quelle
Wenn Sie etwas Einfaches benötigen, können Sie Folgendes tun:
Hier ist ein Beispiel für den Code
quelle