Frage

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

War es hilfreich?

Lösung

Profil.Profil.Profil.Ich bin mir nicht sicher, ob es irgendetwas für PHP gibt, aber es sollte einfach sein, ein kleines Tool zu schreiben, um Profilinformationen in Ihren Code einzufügen.Sie möchten Funktionszeiten und SQL-Abfragezeiten profilieren.

Also, wo Sie 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 zu einem Hindernis werden.)

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 nutzen, um Ihre Engpässe zu identifizieren.

Andere Tipps

Eine vernünftige Technik, die sich leicht von der Stange holen lässt, ist das Caching.In der Regel wird viel Zeit in die Generierung von Ressourcen für Clients investiert, die bei allen Anfragen (und sogar bei allen Clients) gleich sind.Die Eliminierung dieser Laufzeitarbeit kann zu dramatischen Geschwindigkeitssteigerungen führen.Sie können die generierte Ressource (oder das Ressourcenfragment) in eine Datei außerhalb des Webbaums kopieren und sie dann bei Bedarf wieder einlesen.Offensichtlich ist eine gewisse Profilierung erforderlich, um sicherzustellen, dass dies tatsächlich schneller ist als die Regeneration. Das regelmäßige Zurückkehren des Webservers zur Festplatte kann nachteilig sein, sodass die Ressource wirklich häufig wiederverwendet werden muss.

Sie werden vielleicht auch überrascht sein, wie viel Zeit in schlecht geschriebene Datenbankabfragen investiert wird.Überprüfen Sie regelmäßig generierte Abfragen und prüfen Sie, ob sie neu geschrieben werden können.Der Zeitaufwand für die Ausführung des eigentlichen PHP-Codes ist im Allgemeinen ziemlich begrenzt, es sei denn, Sie verwenden suboptimale Algorithmen.

Keines davon ist auf PHP beschränkt, obwohl einige der „magischen“ Ansätze/Funktionen von PHP einen übermäßig davor schützen können, über diese Bedenken nachzudenken.Beispielsweise habe ich kürzlich ein Skript aktualisiert, das array_search verwendet hat, um eine binäre Suche über ein sortiertes Array durchzuführen, und die erwartete exponentielle Beschleunigung erzielt.

Erwägen Sie wirklich die Verwendung des XDebug-Profilers:Es hilft bei der Überprüfung, wie oft eine bestimmte Funktion im Vergleich zu Ihren Erwartungen ausgeführt wird.

Ich versuche, die Anzahl der Anweisungen zu reduzieren und gleichzeitig die Lesbarkeit des Codes zu verbessern, indem ich bei Bedarf die Logik durch Array-Suchen ersetze.Das hat Jeff Atwood in „The Best Code is No Code At All“[1] geschrieben.

  • Vermeiden Sie auch Schleifen in einer anderen Schleife und verschachtelt, wenn/sonst Aussagen.
  • Kurze Funktionen.Manchmal muss nicht viel Code ausgeführt werden, wenn der Ergebniswert bereits bekannt ist.
  • Unnötige Tests:

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

    kann auch geschrieben werden als:

    Wenn (!$array) return;

    Ein weiterer Funktionsaufruf entfällt!

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

Sie können den Code mit zwei grundlegenden Dingen optimieren:

Optimierung der mit PHP verbundenen Bibliothek und des Servers

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

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

Optimieren Sie Ihren Code mit Code-Profiler und Code-Analysator

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

1) Öffnen Sie NetBeans und wählen Sie dann in der Menüleiste „Extras“ > „Plugin“ die Option aus.Suchen Sie dann im verfügbaren Plug-in-Tab nach dem Plug-in-Namen „phpksmd“ und installieren Sie es von dort aus.

2) Öffnen Sie nun das Terminal und melden Sie sich als Superuser an, indem Sie den Befehl „sudo su“ eingeben.

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

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

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

4) Führen Sie dann den Befehl aus

"pear config-set auto_discover 1"

Dies wird verwendet, um die automatische Pfaderkennung für die erforderlichen Plug-Ins auf „true“ zu setzen.So werden sie automatisch am gewünschten Ort installiert.

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

"pear install --alldeps pear/PHP_CodeSniffer"

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

"pear install --alldeps phpmd/PHP_PMD"

Wenn Sie bei der Installation dieses Moduls die Fehlermeldung „Ungültiger Paketname/Ungültige Paketdatei „phpmd/PHP_PMD““ erhalten.Sie müssen den Befehl „pearchannel-discover pear.phpmd.org“ verwenden, um diesen Fehler zu beheben.Nach diesem Befehl können Sie den obigen Befehl erneut ausführen, um den Mess Detector zu installieren.

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

"pear install --alldeps pdepend/PHP_Depend"

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

"pear install --alldeps phpunit/phpcpd"

9) Führen Sie dann den Befehl aus

"pear config-set auto_discover 0"

Dies wird verwendet, um den Pfad für die automatische Erkennung auf „false“ zu setzen.

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

Es gibt keine magische Lösung und der Versuch, generische Lösungen bereitzustellen, könnte durchaus Zeitverschwendung sein.

Wo liegen Ihre Engpässe?Sind Ihre Skripte beispielsweise prozessor-/datenbank-/speicherintensiv?

Haben Sie ein Profiling durchgeführt?

Das Einschließen von Dateien ist langsam und das Anfordern derselben ist noch langsamer.Wenn Sie __autoload zum Einschließen jeder Klasse verwenden, summiert sich das.Zum Beispiel.

Ich bin immer etwas vorsichtig, wenn ich versuche, bei der Codeoptimierung zu clever vorzugehen, wenn dadurch die Klarheit des Codes beeinträchtigt wird.Wenn Sie Code unkenntlich machen müssen, um ihn schneller zu machen, wäre es dann nicht günstiger, Hardware zu aktualisieren, anstatt Ihre Zeit damit zu verschwenden, Code zu optimieren?Schließlich sind Prozessorzyklen günstiger als Programmierzyklen.

Die, die mir einfallen...

  • Schleifeninvarianten sind immer gut zu sehen.

  • Schreiben Sie E_strict und E_Notice konformes Code, insbesondere wenn Sie Fehler anmelden.

  • Vermeiden Sie den @-Operator.

  • Absolute Wege für Forderungen und Einschlüsse.

  • Verwenden Sie strpos, str_replace usw.statt regulärer Ausdrücke, wann immer möglich.

Dann gibt es noch eine Reihe anderer Methoden, die vielleicht funktionieren, Ihnen aber wahrscheinlich keinen großen Nutzen bringen.

Wenn ich mir Leistungsprobleme ansehe, denke ich, dass es das Beste ist, zu messen, wie lange die Ausführung Ihrer Seiten dauert, und dann auf die langsamsten zu schauen.Wenn Sie diese echten Metriken erhalten, können Sie die Leistung der langsamsten Metriken häufig um Größenordnungen verbessern, indem Sie entweder eine langsame SQL-Abfrage reparieren oder den Code möglicherweise etwas straffen.

Dies erfordert natürlich keine neue Hardware oder spezielle Software, sondern lediglich einen kritischen Blick auf den vorhandenen Code.

Allerdings wird das nur so lange funktionieren...Wenn Sie wirklich genug Datenverkehr haben, um die Grenzen Ihrer Hardware zu erreichen, und/oder es Code gibt, der von Natur aus langsam und wirklich erforderlich ist, müssen Sie sich nach anderen Möglichkeiten umsehen.

Ich bin für ein großes Berichtssystem verantwortlich und wir verfolgen auf diese Weise die langsamsten Berichte.Ich gebe einen eindeutigen Schlüssel in die Datenbank ein, wenn der Bericht startet, und wenn er fertig ist, kann ich feststellen, wie lange es gedauert hat.Ich verwende die Datenbank, weil ich auf diese Weise erkennen kann, wann eine Seiten-Zeitüberschreitung auftritt (was viel häufiger vorkommt, als mir lieb ist).

Befolgen Sie zunächst einige der anderen Ratschläge, z. B. Profilerstellung und das Treffen guter Entscheidungen zur Ressourcenzuteilung, z. B.Caching.

Berücksichtigen Sie auch die Leistung externer Ressourcen wie Ihrer Datenbank.In MySQL können Sie das überprüfen langsames Abfrageprotokoll Zum Beispiel.Stellen Sie außerdem sicher, dass Sie Ihre Datenbank nicht entworfen und vergessen haben.Optimierung Ihrer Abfragen (wieder für MySQL) gegen echte Daten kann sich auszahlen.

Rasmus Lerdorf hat in seinem jüngsten Vortrag einige gute Tipps gegeben.Einfach ist schwer" auf der FrOSCon '08.Wenn Sie einen Bytecode-Cache verwenden (und Sie sollten wirklich einen verwenden), schaden Einbindungspfadfehler sehr. Optimieren Sie daher „require/require_once“.

Sie können ein Profilierungstool wie xhprof verwenden, um anzuzeigen, welcher Teil Ihres Codes optimiert werden kann!

1) Verwenden Sie die neueste PHP-Version

Das Kernteam arbeitet hart daran, die Leistung von PHP in jeder Version zu verbessern.

2) Verwenden Sie einen Bytecode-Cache

Seit PHP 5.5 wurde PHP ein Bytecode-Cache mit dem Namen hinzugefügt OPcache.Benutzen OPcache kann einen großen Unterschied machen, insbesondere seit PHP 7.Es erhält Verbesserungen in jeder PHP-Version und erhält möglicherweise sogar eine JIT-Implementierung in der Zukunft.

3) Profilerstellung

Während der Profilerstellung erhalten Sie einen guten Einblick in das, was genau passiert.Dies hilft sehr dabei, Engpässe in Ihrem Code zu finden.

Eines der am häufigsten verwendeten Tools ist XHProf wird aber nicht mehr offiziell unterstützt und hat Probleme mit PHP >= 7.Eine Alternative, wenn Sie PHP >= 7 profilieren möchten, ist Tideways Das ist eine Abzweigung von XHProf.

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