CPU-Zyklen, Speichernutzung, Ausführungszeit usw.?
Hinzugefügt: Gibt es eine quantitative Möglichkeit, die Leistung in JavaScript zu testen, außer nur die Wahrnehmung, wie schnell der Code ausgeführt wird?
javascript
performance
Danmine
quelle
quelle
Antworten:
Profiler sind definitiv ein guter Weg, um Zahlen zu erhalten, aber meiner Erfahrung nach ist die wahrgenommene Leistung alles, was für den Benutzer / Kunden wichtig ist. Zum Beispiel hatten wir ein Projekt mit einem Ext-Akkordeon, das erweitert wurde, um einige Daten und dann einige verschachtelte Ext-Gitter anzuzeigen. Alles wurde tatsächlich ziemlich schnell gerendert, kein einzelner Vorgang dauerte lange, es wurden nur viele Informationen gleichzeitig gerendert, sodass es sich für den Benutzer langsam anfühlte.
Wir haben dies behoben, indem wir nicht zu einer schnelleren Komponente gewechselt oder eine Methode optimiert haben, sondern indem wir zuerst die Daten gerendert und dann die Gitter mit einem setTimeout gerendert haben. Die Informationen erschienen also zuerst, und die Gitter wurden eine Sekunde später eingefügt. Insgesamt dauerte dies etwas länger, aber für den Benutzer wurde die wahrgenommene Leistung verbessert.
In diesen Tagen, die Chrome - Profiler und andere Werkzeuge sind allgemein verfügbar und einfach zu bedienen, wie sind
console.time()
,console.profile()
undperformance.now()
. Chrome bietet Ihnen auch eine Zeitleistenansicht, die Ihnen zeigen kann, was Ihre Framerate beeinträchtigt, wo der Benutzer möglicherweise wartet usw.Das Finden von Dokumentation für all diese Tools ist wirklich einfach, dafür benötigen Sie keine SO-Antwort. 7 Jahre später werde ich immer noch den Rat meiner ursprünglichen Antwort wiederholen und darauf hinweisen, dass langsamer Code für immer ausgeführt werden kann, wenn ein Benutzer ihn nicht bemerkt, und ziemlich schneller Code, der dort ausgeführt wird, wo er es tut, und er wird sich über das beschweren ziemlich schneller Code, der nicht schnell genug ist. Oder dass Ihre Anfrage an Ihre Server-API 220 ms gedauert hat. Oder so etwas anderes. Der Punkt bleibt, dass Sie einen Profiler herausnehmen und nach Arbeit suchen, die Sie erledigen müssen, aber möglicherweise nicht die Arbeit, die Ihre Benutzer benötigen.
quelle
Ich stimme zu, dass die wahrgenommene Leistung wirklich alles ist, was zählt. Aber manchmal möchte ich nur herausfinden, welche Methode etwas schneller macht. Manchmal ist der Unterschied RIESIG und wissenswert.
Sie könnten einfach Javascript-Timer verwenden. Aber ich erhalte normalerweise viel konsistentere Ergebnisse mit den nativen Chrome (jetzt auch in Firefox und Safari) devTool-Methoden
console.time()
&console.timeEnd()
Beispiel, wie ich es benutze:
Update (04.04.2016):
Chrome Canary hat kürzlich ein Line Level Profiling auf der Registerkarte "Quellen" der Entwicklertools hinzugefügt , auf der Sie genau sehen können, wie lange die Ausführung jeder Zeile gedauert hat!
quelle
Wir können die von jeder Funktion benötigte Zeit immer anhand eines einfachen Datumsobjekts messen .
quelle
performance.now()
Versuchen Sie es mit jsPerf . Es ist ein Online-Javascript-Leistungstool zum Benchmarking und Vergleichen von Codeausschnitten. Ich benutze es die ganze Zeit.
quelle
%timeit
in eineripython
REPL-Shell für Python-Code.Die meisten Browser implementieren jetzt hochauflösendes Timing in
performance.now()
. Es istnew Date()
für Leistungstests überlegen, da es unabhängig von der Systemuhr arbeitet.Verwendungszweck
Verweise
quelle
performance.now()
.JSLitmus ist ein leichtes Tool zum Erstellen von Ad-hoc-JavaScript-Benchmark-Tests
Lassen Sie uns die Leistung zwischen
function expression
und untersuchenfunction constructor
:Was ich oben getan habe, ist eine gleiche Operation zu erstellen
function expression
undfunction constructor
auszuführen. Das Ergebnis ist wie folgt:FireFox-Leistungsergebnis
IE-Leistungsergebnis
quelle
Einige Leute schlagen bestimmte Plug-Ins und / oder Browser vor. Ich würde nicht, weil sie nur für diese eine Plattform wirklich nützlich sind; Ein Testlauf unter Firefox wird nicht genau in IE7 übersetzt. Angesichts der Tatsache, dass 99,999999% der Websites von mehr als einem Browser besucht werden, müssen Sie die Leistung auf allen gängigen Plattformen überprüfen.
Mein Vorschlag wäre, dies im JS zu belassen. Erstellen Sie eine Benchmarking-Seite mit all Ihren JS-Tests und planen Sie die Ausführung. Sie können AJAX sogar die Ergebnisse an Sie zurücksenden lassen, um sie vollständig automatisiert zu halten.
Dann einfach abspülen und über verschiedene Plattformen wiederholen.
quelle
Ich habe ein kleines Tool, mit dem ich schnell kleine Testfälle im Browser ausführen und sofort die Ergebnisse erhalten kann:
JavaScript-Geschwindigkeitstest
Sie können mit Code spielen und im getesteten Browser herausfinden, welche Technik besser ist.
quelle
Ich denke, dass das Testen der JavaScript-Leistung (Zeit) völlig ausreicht. Ich habe hier einen sehr praktischen Artikel über JavaScript-Leistungstests gefunden .
quelle
Hier ist eine einfache Funktion, die die Ausführungszeit einer übergebenen Funktion anzeigt:
quelle
Sie könnten dies verwenden: http://getfirebug.com/js.html . Es hat einen Profiler für JavaScript.
quelle
Schnelle Antwort
In jQuery (genauer gesagt in Sizzle) verwenden wir dies (Checkout-Master und Open Speed / Index.html in Ihrem Browser), das wiederum Benchmark.js verwendet . Dies wird zum Leistungstest der Bibliothek verwendet.
Lange Antwort
Wenn der Leser den Unterschied zwischen Benchmark, Arbeitslast und Profilern nicht kennt, lesen Sie zuerst einige Grundlagen zu Leistungstests im Abschnitt "readme 1st" von spec.org . Dies ist für Systemtests gedacht, aber das Verständnis dieser Grundlagen hilft auch beim JS-Perfektionstest. Einige Highlights:
Leistungstests JS
Im Idealfall besteht der beste Leistungstest darin, Ihre eigene Anwendung mit Ihrer eigenen Arbeitslast zu verwenden und zu wechseln, was Sie zum Testen benötigen: verschiedene Bibliotheken, Maschinen usw.
Wenn dies nicht möglich ist (und normalerweise nicht). Der erste wichtige Schritt: Definieren Sie Ihre Arbeitslast. Es sollte die Arbeitslast Ihrer Anwendung widerspiegeln. In diesem Gespräch spricht Vyacheslav Egorov über beschissene Workloads, die Sie vermeiden sollten.
Dann können Sie Tools wie Benchmark.js verwenden, um Metriken zu erfassen, normalerweise Geschwindigkeit oder Durchsatz. Bei Sizzle möchten wir vergleichen, wie sich Korrekturen oder Änderungen auf die systemische Leistung der Bibliothek auswirken.
Wenn etwas wirklich schlecht funktioniert, müssen Sie als Nächstes nach Engpässen suchen.
Wie finde ich Engpässe? Profiler
Was ist der beste Weg, um die Ausführung von Javascript zu profilieren?
quelle
Ich finde die Ausführungszeit die beste Maßnahme.
quelle
Sie könnten console.profile in firebug verwenden
quelle
Normalerweise teste ich nur die Javascript-Leistung, wie lange das Skript ausgeführt wird. jQuery Lover hat einen guten Artikel-Link zum Testen der Leistung von Javascript-Code bereitgestellt. Der Artikel zeigt jedoch nur, wie Sie testen können, wie lange Ihr Javascript-Code ausgeführt wird. Ich würde auch empfehlen, den Artikel "5 Tipps zur Verbesserung Ihres jQuery-Codes bei der Arbeit mit großen Datenmengen" zu lesen .
quelle
Hier ist eine wiederverwendbare Klasse für die Zeitleistung. Beispiel ist im Code enthalten:
quelle
UX Profiler nähert sich diesem Problem aus Anwendersicht. Es gruppiert alle Browserereignisse, Netzwerkaktivitäten usw., die durch eine Benutzeraktion (Klick) verursacht wurden, und berücksichtigt alle Aspekte wie Latenz, Zeitüberschreitungen usw.
quelle
Ich sah ähnlich aus, fand es aber.
https://jsbench.me/
Es ermöglicht einen Vergleich von Seite zu Seite und Sie können dann auch die Ergebnisse teilen.
quelle
Die goldene Regel lautet, den Browser Ihres Benutzers unter keinen Umständen zu sperren. Danach schaue ich normalerweise auf die Ausführungszeit, gefolgt von der Speichernutzung (es sei denn, Sie machen etwas Verrücktes, in diesem Fall könnte es eine höhere Priorität haben).
quelle
Leistungstests wurden in letzter Zeit zu einem Modewort, aber das heißt nicht, dass Leistungstests kein wichtiger Prozess in der Qualitätssicherung oder sogar nach dem Versand des Produkts sind. Und während ich die App entwickle, verwende ich viele verschiedene Tools, von denen einige oben erwähnt wurden, wie der Chrome Profiler. Normalerweise schaue ich mir ein SaaS oder eine OpenSource an, die ich in Betrieb nehmen und vergessen kann, bis ich die Warnung bekomme, dass etwas schief gelaufen ist .
Es gibt viele großartige Tools, mit denen Sie die Leistung im Auge behalten können, ohne dass Sie durch die Rahmen springen müssen, um einige grundlegende Warnungen einzurichten. Hier sind einige, die es meiner Meinung nach wert sind, selbst überprüft zu werden.
Um ein klareres Bild zu zeichnen, finden Sie hier ein kleines Tutorial zum Einrichten der Überwachung für eine Reaktionsanwendung.
quelle
Dies ist eine gute Möglichkeit, Leistungsinformationen für den jeweiligen Vorgang zu erfassen.
quelle