Wie kann man die Effizienz von PHP-Skripten messen?
Ich will wissen, was ist der beste Weg, um benchmark-meine PHP-Skripte. Egal, ob Sie einen cron-job oder eine Webseite oder einen web-service.
Ich weiß, dass ich verwenden können, microtime aber ist es das wirklich gibt, ist mir die Reale Zeit, die von einem PHP-Skript?
Möchte ich testen und bewerten verschiedene Funktionen in PHP, die das gleiche tun. Zum Beispiel preg_match
vs strpos
oder domdocument
vs preg_match
oder preg_replace vs str_replace`
Beispiel von einer Webseite:
<?php
//login.php
$start_time = microtime(TRUE);
session_start();
//do all my logic etc...
$end_time = microtime(TRUE);
echo $end_time - $start_time;
Dieser Ausgabe: 0.0146126717 (schwankt die ganze Zeit - aber das ist der Letzte, den ich bekam). Das heißt, es dauerte 0.015 oder so, um das PHP script ausführen.
Gibt es eine bessere Möglichkeit?
InformationsquelleAutor der Frage eric | 2011-11-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wirklich wollen, um benchmark-real-world-code, verwenden Sie tools wie Xdebug und XHProf.
Xdebug ist ideal für Sie wenn Sie arbeiten in dev - /staging-und XHProf ist ein großes Werkzeug für die Produktion, und es ist sicher zu führen (solange Sie die Anweisungen zu Lesen). Die Ergebnisse von einer einzigen Seite geladen werden, nicht mehr so relevant wie zu sehen, wie Ihre code ausführt, während der server immer gehämmert zu tun, eine million andere Dinge, und die Ressourcen knapp werden. Dies wirft eine weitere Frage: sind Sie, Engpässen auf der CPU? RAM? I/O?
Sie müssen auch darüber hinaus schauen Sie einfach den code, den Sie in Ihren Skripts zu, wie Sie Ihre Skripte/- Seiten serviert. Welche web-server benutzt du? Als Beispiel kann ich machen, nginx + PHP-FPM ernst aus ausführen mod_php + Apache, die wiederum wird verprügelt zur Auslieferung statischer Inhalte mit einem guten CDN.
Die nächste Sache zu prüfen, ist, was Sie versuchen zu optimieren?
Priorität Nummer eins?
möglich mit der geringsten CPU-Verbrauch ist das Ziel?
Den ersteren kann geholfen werden, indem Dinge wie Gzip alle Ressourcen, die an den browser gesendet, noch so tun könnte (in einigen Fällen) schieben Sie weiter Weg von der Erreichung der letzteren.
Hoffentlich alle der oben genannten können helfen zu zeigen, dass die sorgfältig isolierten 'lab' - Tests nicht unbedingt die Variablen und Probleme, die Sie stoßen in der Produktion, und, dass Sie müssen erkennen, was Ihre hohe Ziel-und dann, was Sie tun können, um dorthin zu gelangen, bevor Sie sich nach unten der micro/vorzeitige-Optimierung Weg zu Hölle.
InformationsquelleAutor der Antwort James Butler
Benchmark, wie schnell dein komplettes Skript auf dem server ausgeführt wird, gibt es viele tools, die Sie verwenden können. Zunächst sicherstellen, dass Ihr Skript (preg_match vs strpos zum Beispiel) zur Ausgabe die gleichen Ergebnisse, um sich zu qualifizieren Ihre testen.
Können Sie verwenden:
InformationsquelleAutor der Antwort Book Of Zeus
Werden Sie wollen, zu betrachten Xdebug und insbesondere, Xdebug ist profiling-Möglichkeiten.
Grundsätzlich können Sie den profiler, und jedes mal, wenn Sie eine Webseite laden es schafft eine cachegrind-Datei, die gelesen werden können, mit WinCacheGrind oder KCacheGrind.
Xdebug kann ein bisschen schwierig zu konfigurieren, also hier ist der entsprechende Abschnitt meiner
php.ini
Referenz:Und hier ist ein screenshot von einem
.out
Datei in WinCacheGrind:Sollte genügend details darüber, wie effizient Sie Ihre PHP-Skript. Sie soll die Dinge kümmern, die die meisten Höhe der Zeit. Zum Beispiel könnten Sie die Optimierung einer Funktion nehmen Sie die Hälfte der Zeit, aber Ihre Bemühungen wäre besser gedient, die Optimierung einer Funktion, die aufgerufen wird, Dutzende, wenn nicht Hunderte Male während eine Seite geladen wird.
Wenn Sie neugierig sind, ist dies nur eine alte version des CMS schrieb ich für meinen eigenen Gebrauch.
InformationsquelleAutor der Antwort Alec Gorge
Versuchen https://github.com/fotuzlab/appgati
Ermöglicht es zu definieren, Schritte in den code und die reports Zeit -, Speicher-Auslastung, server-load etc. zwischen zwei Schritten.
Etwas wie:
Beispiel-Ausgabe array:
InformationsquelleAutor der Antwort fotuzlab
Ich würde schauen in xhprof. Es spielt keine Rolle, ob es über die cli oder über eine andere sapi (wie fpm oder fcgi oder auch das Apache-Modul).
Der beste Teil über xhprof ist, dass es sogar fit genug, um in der Produktion. Etwas, das funktioniert nicht so gut mit xdebug (letztes mal ich überprüfte). xdebug hat einen Einfluss auf die Leistung und xhprof (ich würde nicht sagen, es gibt keine), gelingt viel besser.
Wir verwenden Häufig xhprof Proben mit echtem Datenverkehr und analysieren dann den code von dort.
Es ist nicht wirklich eine benchmark in Bezug auf die, es wird Sie einen Zeit und all das, aber tut es das auch. Es macht es sehr einfach zu analysieren, Produktions-traffic und dann bohren Sie nach unten, um die php-Funktion level in der callgraph gesammelt.
Einmal die extension kompiliert und geladen, starten Sie die Profilerstellung in den code mit:
Stoppen:
Dann speichern Sie die Daten in eine Datei oder Datenbank - was auch immer schwimmt Ihr Eid und nicht unterbrechen üblichen Laufzeit. Wir asynchron, push-das S3 zum zentralisieren der Daten (in der Lage sein, um zu sehen, alle Läufe von allen unseren Servern).
Den code auf github enthält eine xhprof_html Ordner, in dem Sie dump auf den server und mit minimal-Konfiguration, können Sie visualisieren die gesammelten Daten und starten Sie Drilldown.
HTH!
InformationsquelleAutor der Antwort Till
Steckte es in eine
for
Schleife zu tun jedes Ding 1.000.000 mal um eine realistischere Zahl. Und nur dann starten Sie den timer einfach vor den code, den Sie eigentlich wollen-benchmark, zeichnen Sie dann die end-Zeit unmittelbar nach (D. H. nicht, starten Sie den timer, bevor diesession_start()
.Auch sicherstellen, dass der code identisch ist für jede Funktion, die Sie möchten, benchmark, mit Ausnahme der Funktion, die Sie timing.
Wie das Skript ausgeführt wird (cronjob, php von der Kommandozeile, Apache, etc.) sollte keinen Unterschied machen, da Sie nur das timing der relative Unterschied zwischen der Geschwindigkeit der verschiedenen Funktionen. Also das Verhältnis sollte das gleiche bleiben.
Wenn der computer, auf dem Sie ausgeführt werden, der benchmark hat viele andere Dinge, könnte dies Auswirkungen auf die benchmark-Ergebnisse, wenn es geschieht, um eine Spitze in der CPU-oder Speicherauslastung aus einer anderen Anwendung, während Ihre benchmark ausgeführt wird. Aber so lange wie Sie haben eine Menge von Ressourcen zu schonen, auf dem computer, dann ich glaube nicht, dass dies ein problem sein wird.
InformationsquelleAutor der Antwort Alasdair
Einen guten start ist mit xdebugs profiler
http://xdebug.org/docs/profiler
Vielleicht nicht die einfachste Sache zu einzurichten und zu verwenden, aber sobald man es gehen, der schieren Menge der Daten und die Leichtigkeit des Betrachtens ist unersetzlich.
InformationsquelleAutor der Antwort goat
Eric,
Fragen Sie sich, die falsche Frage. Wenn Ihr Skript ausgeführt wird, in ~15 MS dann seine Zeit weitgehend irrelevant ist. Wenn Sie auf einem shared-service-PHP-image-Aktivierung wird nehmen ~100 mSec, Lesen Sie im Skript-Dateien ~30-50 MS, wenn man Sie vollständig auf dem server zwischengespeichert, eventuell 1 oder mehr Sekunden, wenn geladen wird, die von einem backend-NAS-farm. Netzwerk-Verzögerungen beim laden der Seite Möbel hinzufügen können, viele Sekunden.
Die wichtigste Frage ist hier die Benutzer-Wahrnehmung der laden: wie lange ist er oder Sie warten müssen, zwischen Klick auf den Link und bekommen eine vollständig gerenderte Seite. Haben Sie einen Blick auf Google Page Speed die Sie verwenden können, als Ff oder chrome-Erweiterung, und die Pagespeed-Dokumentation, die beschreibt, in die Tiefe, wie eine gute Seiten-performance. Befolgen Sie diese Richtlinien, und versuchen Sie, Ihre Seite erreicht souverän besser als 90/100. (Die google-Startseite erzielt 99/100 wie mein blog). Dies ist der beste Weg, um gute Benutzer wahrgenommenen Leistung.
InformationsquelleAutor der Antwort TerryE
Ist es auch gut zu halten Ihre Augen auf Ihren PHP-code und cross-check mit diesem link , um sicherzustellen, dass Ihre Codierung selbst ist nicht potentiell störende die performance der app.
InformationsquelleAutor der Antwort Ritesh Aryal