15 Stimmen

PHP-Leistung

Was kann ich tun, um die Leistung/Geschwindigkeit meiner PHP-Skripte zu erhöhen, ohne Software auf meinen Servern zu installieren?

19voto

Frank Krueger Punkte 67044

Profil. Das Profil. Profil. Ich bin mir nicht sicher, ob es etwas für PHP gibt, aber es sollte einfach sein, ein kleines Tool zu schreiben, um Profiling-Informationen in Ihren Code einzufügen. Sie werden ein Profil der Funktionszeiten und der SQL-Abfragezeiten erstellen wollen.

Wenn Sie also eine Funktion haben:

function foo($stuff) {
    ...
    return ...;
}

Ich würde es ändern in:

function foo($stuff) {
    trace_push_fn('foo');
    ...
    trace_pop_fn('foo');
    return ...;
}

(Dies ist einer der Fälle, in denen mehrere Rückgaben in einer Funktion ein Hindernis darstellen).

Und SQL:

function bar($stuff) {
    trace_push_fn('bar');

    $query = ...;
    trace_push_sql($query);
    mysql_query($query);
    trace_pop_sql($query);

    trace_pop_fn('bar');
    return ...;
}

Am Ende können Sie einen vollständigen Trace der Programmausführung erstellen und alle möglichen Techniken anwenden, um Ihre Engpässe zu identifizieren.

8voto

Adam Wright Punkte 48270

Eine vernünftige Technik, die leicht aus dem Regal gezogen werden kann, ist das Caching. Die Generierung von Ressourcen für Clients, die bei verschiedenen Anfragen (und sogar über mehrere Clients hinweg) gleich sind, nimmt viel Zeit in Anspruch; der Wegfall dieser Laufzeitarbeit kann zu dramatischen Geschwindigkeitssteigerungen führen. Sie können die generierte Ressource (oder das Ressourcenfragment) in eine Datei außerhalb des Web-Trees auslagern und sie dann bei Bedarf wieder einlesen. Natürlich muss ein gewisses Profiling durchgeführt werden, um sicherzustellen, dass dies tatsächlich schneller ist als eine Neugenerierung - den Webserver zu zwingen, regelmäßig auf die Festplatte zurückzugreifen, kann sich nachteilig auswirken, so dass die Ressource wirklich eine starke Wiederverwendung haben muss.

Sie werden auch überrascht sein, wie viel Zeit in schlecht geschriebenen Datenbankabfragen verbracht wird; prüfen Sie häufig generierte Abfragen und sehen Sie, ob sie umgeschrieben werden können. Der Zeitaufwand für die Ausführung des eigentlichen PHP-Codes ist im Allgemeinen recht gering, es sei denn, Sie verwenden suboptimale Algorithmen.

Beides ist nicht auf PHP beschränkt, obwohl einige der "magischen" Ansätze/Funktionen von PHP einen zu sehr davor schützen können, über diese Probleme nachzudenken. Zum Beispiel habe ich vor kurzem ein Skript aktualisiert, das array_search verwendete, um eine binäre Suche über ein sortiertes Array zu verwenden, und dadurch den erwarteten exponentiellen Geschwindigkeitszuwachs erzielt.

6voto

Willem Punkte 918

Erwägen Sie die Verwendung des XDebug-Profilers: Er hilft bei der Überprüfung, wie viel eine bestimmte Funktion im Vergleich zu dem, was Sie erwartet hätten, ausgeführt wird.

Ich versuche, die Anzahl der Anweisungen zu verringern und gleichzeitig die Lesbarkeit des Codes zu verbessern, indem ich die Logik gegebenenfalls durch Array-Lookups ersetze. Das ist es, was Jeff Atwood in [The Best Code is No Code At All][1] geschrieben hat.

  • Vermeiden Sie außerdem Schleifen innerhalb einer anderen Schleife und verschachtelte if/else-Anweisungen.
  • Kurze Funktionen. Manchmal ist eine Menge Code nicht ausgeführt werden muss wenn der Ergebniswert bereits bekannt ist. bekannt ist.
  • Unnötige Tests:

    if (count($array) === 0) return;

    kann auch geschrieben werden als:

    if (! $array) return;

    Ein weiterer Funktionsaufruf wurde eliminiert!

    [1]: http://www.codinghorror.com/blog/archives/000878.html "Der beste Code ist gar kein Code"

1 Stimmen

if (! $array) return; eine PHP-Meldung über eine undefinierte Variable verursachen kann, sollte man die if(empty($array)) return false;

0 Stimmen

Ich habe diesen Kommentar in einer Zeit geschrieben, in der eine PHP-Version verwendet wurde, die keinen nützlichen STRICT-Modus hatte. Die Leute sollten dieses Beispiel als veraltet betrachten und tatsächlich empty() verwenden, um immer zu testen, ob eine Variable gefüllt ist (oder null, leer, false)

5voto

Dinesh Saini Punkte 2853

Sie können den Code durch zwei grundlegende Dinge optimieren:

Optimierung der PHP-assoziierten Bibliothek und des Servers

Gehen Sie durch https://www.digitalocean.com/community/articles/how-to-optimize-apache-web-server-performance Oder

Sie können ein Profiling-Tool wie xhprof verwenden, um zu sehen, welcher Teil Ihres Codes optimiert werden kann, und hier ist der Link zu folgen: http://michaelsanford.com/compiling-xhprof-for-php-5-4/

Optimierung Ihres Codes mit Code-Profiler und Code-Analysator

Sie müssen Netbeans installieren, um dieses Plugin zu verwenden. Hier sind die Schritte, die Sie befolgen müssen:

1) Öffnen Sie NetBeans und wählen Sie die Option in der Menüleiste Tools > Plugin. Suchen Sie dann das Plugin "phpcsmd" in der Registerkarte "Verfügbare Plugins" und installieren Sie es von dort aus.

2) Öffnen Sie nun das Terminal und geben Sie dort als Superuser den Befehl "sudo su" ein.

3) Installieren Sie die PEAR-Bibliothek (falls sie nicht installiert ist) in Ihrem System, indem Sie folgende Befehle in Ihrem Terminal ausführen

a) wget http://pear.php.net/go-pear.phar
b) php go-pear.phar

Da wir diese für die Installation weiterer Addons benötigen.

4) Führen Sie dann den Befehl

"pear config-set auto_discover 1"

Dies wird verwendet, um die automatische Erkennung des Pfades für die erforderlichen Plug-ins auf "true" zu setzen. So werden sie automatisch an dem gewünschten Ort installiert.

5) Führen Sie dann den folgenden Befehl aus, um PHP Code Sniffer zu installieren.

"pear install --alldeps pear/PHP_CodeSniffer"

6) Installieren Sie nun den PHP Mess Detector, indem Sie folgenden Befehl ausführen

"pear install --alldeps phpmd/PHP_PMD"

Wenn Sie bei der Installation dieses Moduls die Fehlermeldung "Ungültiger Paketname/Paketdatei "phpmd/PHP_PMD"" erhalten. Verwenden Sie den Befehl "pear channel-discover pear.phpmd.org", um diesen Fehler zu beheben. Nach diesem Befehl können Sie den obigen Befehl erneut ausführen, um den Mess-Detektor zu installieren.

7) Installieren Sie nun PHP Depend, indem Sie folgenden Befehl ausführen

"pear install --alldeps pdepend/PHP_Depend"

8) Installieren Sie nun den PHP Copy Paste Detector, indem Sie folgenden Befehl ausführen

"pear install --alldeps phpunit/phpcpd"

9) Führen Sie dann den Befehl

"pear config-set auto_discover 0"

Damit wird der Pfad für die automatische Erkennung auf "false" gesetzt.

10) Öffnen Sie dann Net Beans und folgen Sie dem Pfad Tools>Optionen>PHP>PHPCSMD

3voto

Andrew Grant Punkte 57342

Es gibt keine Patentlösung, und der Versuch, generische Lösungen zu finden, könnte reine Zeitverschwendung sein.

Wo sind Ihre Engpässe? Sind Ihre Skripte zum Beispiel prozessor-, datenbank- oder speicherintensiv?

Haben Sie ein Profiling durchgeführt?

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