Heim  >  Artikel  >  Web-Frontend  >  Methoden zur Leistungsoptimierung des Laravel-Frameworks

Methoden zur Leistungsoptimierung des Laravel-Frameworks

一个新手
一个新手Original
2017-10-25 13:56:151980Durchsuche

Dies ist eine Zusammenfassung im Anschluss. Nachdem wir im Optimierungsprozess viele Fallstricke durchgemacht hatten, perfektionierten und implementierten wir schließlich einen vorläufigen Leistungstestplan und fassten einige praktische Fähigkeiten im Laravel-Entwicklungsprozess anhand realer Testdaten zusammen.

Ursprung von 0x00

Kürzlich berichtete ein Kollege, dass die Reaktion der in Laravel geschriebenen Anwendung etwas langsam sei und mehr als 20 Parallelität die CPU erschöpft ... Zur Lösung Das langsame Problem besteht darin, dass einige Schnittstellen sogar NodeJS verwenden.

Und meine erste Reaktion war, wie konnte ein beliebtes Framework so schlecht sein? Es muss ein Fehler bei der Verwendung vorliegen. Um das herauszufinden, habe ich diese Reise zur Optimierung der Laravel-Anwendungsleistung begonnen.

0x01-Tuning-Tipps

Die in diesem Leistungstestplan verwendeten Optimierungstechniken basieren hauptsächlich auf dem Laravel-Framework selbst und den von ihm bereitgestellten Tools.

  1. Anwendungs-Debugging deaktivieren app.debug=false

  2. Cache-Konfigurationsinformationenphp artisan config:cache

  3. Cache Routing-Informationenphp artisan router:cache

  4. Optimierung des Ladens von Klassenkartenphp artisan optimize

  5. Optimierung des automatischen Ladenscomposer dumpautoload

  6. Laden Sie die erforderliche Middleware nur nach Bedarf

  7. Verwenden Sie Just-in-Time-Compiler (JIT), wie zum Beispiel: HHVM, OPcache

  8. Verwenden Sie PHP 7.x

Zusätzlich zu den oben genannten Optimierungstechniken gibt es viele Codierungspraktiken, die die Leistung von Laravel-Anwendungen verbessern können, die in diesem Artikel vorerst nicht erläutert werden . (Sie können auch meinen Folgeartikeln folgen)

1. Schließen Sie das Anwendungsdebug

Öffnen Sie die .env-Datei im Stammverzeichnis der Anwendung und setzen Sie Debug auf „false“.

APP_DEBUG=false

2. Konfigurationsinformationen zwischenspeichern

php artisan config:cache

Durch Ausführen des obigen Befehls können alle Konfigurationsinformationen im Konfigurationsordner in einer bootstrap/cache/config.php-Datei zusammengeführt werden, wodurch die Anzahl der Dateien reduziert wird zur Laufzeit geladene Menge.

php artisan config:clear

Führen Sie den obigen Befehl aus, um den Cache der Konfigurationsinformationen zu löschen, d. h. die bootstrap/cache/config.php-Datei

3 zu löschen Führen Sie den obigen Befehl aus, um die Datei

zu generieren. Routen-Caching kann die Registrierungseffizienz des Routers effektiv verbessern, und der Effekt ist bei großen Anwendungen deutlicher.
php artisan route:cache

bootstrap/cache/routes.phpDurch Ausführen des obigen Befehls wird der Routing-Cache geleert, was bedeutet, dass die Datei

gelöscht wird.
php artisan route:clear

4. Optimierung des Ladens der Klassenzuordnung bootstrap/cache/routes.php

Durch Ausführen des obigen Befehls können häufig geladene Klassen in einer Datei zusammengeführt werden, wodurch die Betriebseffizienz durch Reduzierung des Dateiladens verbessert wird. Dieser Befehl generiert zwei Dateien

und
php artisan optimize --force
.

bootstrap/cache/compiled.phpSie können zusammenzuführende Klassen hinzufügen, indem Sie die Datei bootstrap/cache/services.json ändern.

In einer Produktionsumgebung müssen keine config/compile.php Parameterdateien angegeben werden und diese können automatisch generiert werden.

--forceDurch Ausführen des obigen Befehls wird die Optimierung des Ladens der Klassenzuordnung gelöscht, d. h. die Dateien

und
php artisan clear-compiled
werden gelöscht.

bootstrap/cache/compiled.php5. Optimierung des automatischen Ladens bootstrap/cache/services.json

Laravel-Anwendungen werden mit Composer erstellt. Dieser Befehl konvertiert PSR-0 und PSR-4 in eine Klassenzuordnungstabelle, um die Ladegeschwindigkeit der Klassen zu verbessern.

composer dumpautoload -o

Hinweis: Dieser Vorgang wurde bereits im Befehl

durchgeführt.

php artisan optimize --force6. Laden Sie nur die erforderliche Middleware nach Bedarf

In der Laravel-Anwendung ist eine Menge Middleware integriert und aktiviert. Jede Laravel-Anfrage lädt zugehörige Middleware und generiert verschiedene Daten. Das Auskommentieren unnötiger Middleware (z. B. Sitzungsunterstützung) in

kann die Leistung erheblich verbessern.

7. Verwenden Sie Just-in-Time-Compiler app/Http/Kernel.php

HHVM und OPcache können die Leistung Ihrer Anwendung problemlos um 50 % oder mehr verbessern.

8. Verwendung von PHP 7.x

Man kann nur sagen, dass PHP 7.x im Vergleich zu früheren Versionen eine deutlich verbesserte Leistung aufweist.

Nun, wenn man sich auf Ihre reale Unternehmensumgebung beschränkt, wird sich dies möglicherweise noch lange nicht ändern, daher habe ich es nicht erwähnt.

0x02-Testplan

Wir verwenden den einfachen Apache-ab-Befehl, um nur die Anwendungseintragsdatei zu testen und die Daten aufzuzeichnen und zu analysieren.

Testen Sie nur die Eintragsdatei index.php der Anwendung und greifen Sie auf „/“ oder „/index.php“ zu, um zur Begrüßungsseite des Frames zurückzukehren. Umfassendere Leistungstests erfordern das Testen weiterer Schnittstellen der Anwendung.
  1. Verwenden Sie den Apache-ab-Befehl.
  2. . Dieser Befehl bedeutet, 10 Anfragen an die URL gleichzeitig zu initiieren und 10 Sekunden lang anzuhalten. Die spezifischen Parametereinstellungen im Befehl müssen basierend auf der zu testenden Serverleistung ausgewählt werden.
  3. ab -t 10 -c 10 {url}

    Um Datenfehler zu vermeiden, die durch Maschinenschwankungen verursacht werden, führt jede Testbedingung den ab-Befehl mehrmals aus und zeichnet die Ergebnisse der Befehlsausführung auf, wobei der Schwerpunkt auf der Anzahl der pro Sekunde verarbeiteten Anforderungen liegt die Antwortzeit der Anfrage, analysieren und eliminieren Ausreißer.
  4. Jedes Mal, wenn die Testbedingungen angepasst werden, müssen Sie im Browser auf die Begrüßungsseite zugreifen, um sicherzustellen, dass es aufgrund der Änderung der Testbedingungen nicht zu Zugriffsfehlern kommt. Wenn Seitenzugriffsfehler auftreten, sind die Testergebnisse falsch.

Beschreibung der Serverumgebung

Alle von der spezifischen Umgebung getrennten Testdaten sind bedeutungslos und können nur unter ähnlichen Bedingungen verglichen werden.

  1. Diese Umgebung läuft auf einem Mac mit 8G-Speicher, 2,8-GHz-Prozessor und SSD-Festplatte.

  2. Der Testserver wurde mit Homestead erstellt. Die virtuelle Maschine ist mit einer Single-Core-CPU und 2G-Speicher konfiguriert.

  3. Die Server-PHP-Version ist 7.1. Wenn nicht angegeben, ist OPcache aktiviert.

  4. Die getestete Laravel-Anwendung wurde in Version 5.2 geschrieben. 85 Routen sind in appHttproutes.php definiert.

  5. Während des Testvorgangs gab es außer der virtuellen Maschine, dem Terminal und dem festen Browserfenster keine Programme, die den Betrieb der Maschine beeinträchtigen würden.

Die oben genannten Daten können bei der Durchführung eigener Tests herangezogen werden.

0x03 Testprozess und Daten

1. Es wird keine Optimierung durchgeführt

1.1 Betrieb

  • Führen Sie die entsprechenden Prüfpunkte gemäß durch Folgendes funktioniert.

  • Ausführen ab -t 10 -c 10 http://myurl.com/index.php

Grundlegende Prüfelemente

  • . env-Datei APP_DEBUG=true

  • existiert nichtbootstrap/cache/config.php

  • existiert nichtbootstrap/cache/routes.php

  • Existiert nichtbootstrap/cache/compiled.php und bootstrap/cache/services.json

  • app/Http/Kernel.php Die meisten Middlewares sind im

  • Browser für den Zugriff aktiviert Laravel Die Begrüßungsseite der Anwendung gewährleistet den normalen Zugriff

1.2 Datenaufzeichnung

Methoden zur Leistungsoptimierung des Laravel-Frameworks

2. Anwendungs-Debug schließen

2.1 Vorgang

  • Ändern Sie APP_DEBUG=false in der .env-Datei basierend auf Schritt 1.

  • Besuchen Sie die Begrüßungsseite der Laravel-Anwendung mit Ihrem Browser, um einen normalen Zugriff zu gewährleisten.

  • Ausführen ab -t 10 -c 10 http://myurl.com/index.php.

2.2 Datensatz

Methoden zur Leistungsoptimierung des Laravel-Frameworks

2.3 Vergleichsergebnisse

Vergleich mit Schritt 1-Ergebnissen Erkennung: Nach dem Deaktivieren des Anwendungsdebuggens stieg die Anzahl der pro Sekunde verarbeiteten Anfragen von 26-34 auf 33-35 und die Antwortzeit auf Anfragen sank von meist mehr als 300 ms auf etwa 290 ms. Der Effekt ist nicht offensichtlich, aber Es gibt tatsächlich eine gewisse Verbesserung.

Hinweis: Dieser Teil hängt eng mit der Verwendung von Protokollen in der Anwendung zusammen.

3. Caching-Konfigurationsinformationen aktivieren

3.1 Vorgang

  • Führen Sie basierend auf Schritt 2 php artisan config:cache aus und bestätigen Sie die Generierungbootstrap/cache/config.php.

  • Besuchen Sie die Begrüßungsseite der Laravel-Anwendung mit Ihrem Browser, um einen normalen Zugriff zu gewährleisten.

  • Ausführen ab -t 10 -c 10 http://myurl.com/index.php.

3.2 Datensatz

Methoden zur Leistungsoptimierung des Laravel-Frameworks

3.3 Vergleichsergebnisse

Vergleich mit Schritt 2-Ergebnissen Erkennung: Nach dem Einschalten des Konfigurationsinformationscache stieg die Anzahl der pro Sekunde verarbeiteten Anfragen von 33-35 auf 36-38 und die Antwortzeit der Anfrage sank von etwa 290 ms auf etwa 260 ms. Der Effekt ist nicht offensichtlich, aber Es gibt tatsächlich eine gewisse Verbesserung.

4. Cache-Routing-Informationen aktivieren

4.1 Vorgang

  • Führen Sie basierend auf Schritt 3 php artisan route:cache aus und bestätigen Sie die Generierungbootstrap/cache/routes.php.

  • Besuchen Sie die Begrüßungsseite der Laravel-Anwendung mit Ihrem Browser, um einen normalen Zugriff zu gewährleisten.

  • Ausführen ab -t 10 -c 10 http://myurl.com/index.php.

4.2 Datensatz

Methoden zur Leistungsoptimierung des Laravel-Frameworks

4.3 Vergleichsergebnisse

Vergleichen Sie mit den Ergebnissen von Schritt 3 Ergebnisse: Nach dem Einschalten des Routing-Informationscache stieg die Anzahl der pro Sekunde verarbeiteten Anfragen von 36-38 auf etwa 60 und die Antwortzeit auf Anfragen sank von 260 ms auf etwa 160 ms TPS, es stieg um 70 %.

5. Löschen Sie unnötige Middleware

5.1 Vorgang

  • Kommentieren Sie auf der Grundlage von Schritt 4 unnötigen Middleware-Code aus.

  • Besuchen Sie die Begrüßungsseite der Laravel-Anwendung mit Ihrem Browser, um einen normalen Zugriff zu gewährleisten.

  • Ausführen

    . ab -t 10 -c 10 http://myurl.com/index.php

Methoden zur Leistungsoptimierung des Laravel-Frameworks

Hinweis: Ich habe die gesamte Middleware in diesem Test auskommentiert. In tatsächlichen Situationen sollten Sie versuchen, nur die notwendige Middleware beizubehalten.

5.2 Datensatz

Methoden zur Leistungsoptimierung des Laravel-Frameworks

5.3 Vergleich der Ergebnisse

Verglichen mit den Ergebnissen von Schritt 4 Es wurde festgestellt: Nach dem Entfernen unnötiger Middleware stieg die Anzahl der verarbeiteten Anfragen pro Sekunde von etwa 60 auf etwa 90 und die Antwortzeit der Anfrage sank von 160 ms auf etwa 110 ms. Der Effekt ist sehr offensichtlich von TPS ist es um 50 % gestiegen.

6. Aktivieren Sie die Optimierung des Klassenkartenladens

6.1 Vorgang

  • Führen Sie basierend auf Schritt 5

    aus und bestätigen Sie die Generierungphp artisan optimize --force und bootstrap/cache/compiled.php. bootstrap/cache/services.json

  • Besuchen Sie die Begrüßungsseite der Laravel-Anwendung mit Ihrem Browser, um einen normalen Zugriff zu gewährleisten.

  • Ausführen

    . ab -t 10 -c 10 http://myurl.com/index.php

6.2 Datensatz

Methoden zur Leistungsoptimierung des Laravel-Frameworks

6.3 Vergleichsergebnisse

Vergleich mit den Ergebnissen von Schritt 5 Erkennung: Nach der Optimierung der Klassenzuordnung stieg die Anzahl der pro Sekunde verarbeiteten Anfragen von 90 auf 110 und die Antwortzeit der Anfrage sank von 110 ms auf weniger als 100 ms.

Der Effekt ist ziemlich offensichtlich.

7. OPcache schließen

7.1 Vorgang

  • Schließen Sie basierend auf Schritt 6 den OPcache von PHP und starten Sie den Server neu. Bestätigen Sie, dass der OPcache über den Zend OPcache von phpinfo() geschlossen ist.

  • Besuchen Sie die Begrüßungsseite der Laravel-Anwendung mit Ihrem Browser, um einen normalen Zugriff zu gewährleisten.

  • Ausführen

    . ab -t 10 -c 10 http://myurl.com/index.php

7.2 Datensatz

Methoden zur Leistungsoptimierung des Laravel-Frameworks

7.3 Vergleichsergebnisse

Vergleich mit den Ergebnissen von Schritt 6 Erkennung: Nach dem Ausschalten von OPcache sank die Anzahl der pro Sekunde verarbeiteten Anfragen von 110 auf 15 und die Antwortzeit der Anfrage stieg von unter 100 ms auf über 650 ms.

Der Datenunterschied ist um ein Vielfaches größer, wenn OPcache aktiviert oder deaktiviert ist.

Danach habe ich den OPcache von PHP erneut geöffnet und die Daten wurden auf dem Niveau von Schritt 6 wiederhergestellt.

0x04 Fallstricke

1. [LogicException] Route [/] kann nicht für die Serialisierung vorbereitet werden.

Ausführen des Befehls

Melden Sie diesen Fehler . php artisan route:cache

Ursache: Bei der Verarbeitung von „/“ in der Routing-Datei wird ein Abschluss verwendet. Um diesen Befehl auszuführen, darf die Routing-Implementierung keine Abschlüsse verwenden.

Änderungsplan: Fügen Sie die spezifische Implementierung des Routings in den Controller ein.

2. [Ausnahme] Serialisierung von „Closure“ ist nicht zulässig

Dieser Fehler wird beim Ausführen des Befehls

gemeldet. php artisan route:cache

Ursache: In der Routing-Datei sind doppelte Routen definiert.

Änderungsplan: Suchen Sie nach doppelten Routen in der Routing-Datei und ändern Sie diese. Beachten Sie insbesondere, dass

-Methoden wahrscheinlich zu einer Duplizierung ihrer Methoden führen. resource

3. [RuntimeException] Ungültiger Dateiname angegeben.

Dieser Fehler wird beim Ausführen von

naming gemeldet. php artisan optimize --force

Ursache: Die entsprechende Datei wurde beim Laden der Klasse, die kompiliert werden muss, nicht gefunden. Der zu kompilierende Dateipfad ist in

von Version 5.2 definiert, aber ich weiß nicht, warum vendor/laravel/framework/src/Illuminate/Foundation/Console/Optimize/config.php nicht gefunden wurde, daher wurde dieser Fehler gemeldet. /vendor/laravel/framework/src/Illuminate/Database/Eloquent/ActiveRecords.php

Änderungsplan: Kommentieren Sie die Zeile

in der obigen config.php vorübergehend aus. ../ActiveRecords.php

4. InvalidArgumentException in FileViewFinder.php Zeile 137: View [welcome] nicht gefunden.

Nach dem Ausführen von

wird dieser Fehler beim Zugriff auf die Begrüßungsseite der Laravel-Anwendung im Browser gemeldet. php artisan config:cache

Grund: Der Laravel-Anwendungsserver wird auf einer virtuellen Maschine mit Homestead erstellt. Ich habe diesen Befehl außerhalb der virtuellen Maschine ausgeführt, was dazu führte, dass der Pfad in der generierten config.php der lokale Pfad war, nicht der Pfad auf der virtuellen Maschine. Daher kann die Ansichtsdatei nicht gefunden werden.

Änderungsplan: SSH in die virtuelle Maschine und diesen Befehl ausführen.

0x05 Praktische Fähigkeiten

Die Fallstricke wurden bewältigt und die Tests wurden durchgeführt. Hier finden Sie eine kurze Zusammenfassung der praktischen Fähigkeiten, die auf dieser Erfahrung basieren.

1. Effektive Laravel-Anwendungsoptimierungstipps

  1. Anwendungs-Debug deaktivieren

    app.debug=false

  2. Cache-Konfigurationsinformationen

    php artisan config:cache

  3. Cache-Routing-Informationen

    php artisan router:cache

  4. Optimierung des Ladens von Klassenkarten php artisan optimize (einschließlich automatischer Ladeoptimierung composer dumpautoload)

  5. Notwendige Middleware nur nach Bedarf laden

  6. Verwenden Sie Just-in-Time-Compiler (JIT), wie zum Beispiel: HHVM, OPcache

2. Dinge, die Sie beim Schreiben von Code beachten sollten

  1. Die spezifische Implementierung des Routings wird im Controller platziert.

  2. Definieren Sie keine wiederholten Routen, insbesondere nicht die Methode resouce.

  3. Löschen Sie die Rolle jeder Middleware und löschen Sie unnötige Middleware-Referenzen.

0x06 Nächster Schritt

Die oben genannten Optimierungsfähigkeiten und Codierungsüberlegungen beziehen sich hauptsächlich auf das Framework selbst. Es gibt viele spezifische Optimierungsfähigkeiten in der echten Geschäftslogik-Codierung besprochen.

Die folgende Optimierung konzentriert sich auf bestimmte Codierungspraktiken:

  1. Verwenden Sie Memcached, um die Sitzungskonfiguration/session.php zu speichern

  2. Verwenden professioneller Cache-Treiber

  3. Datenbankanforderungsoptimierung

  4. Caching-Logik für den Datensatz schreiben

  5. Front -End-Ressourcen mit Elixir zusammengeführt

0x07 Am Ende geschrieben

Ich habe viele Artikel und Debatten zum Leistungsvergleich von Frameworks im Internet gesehen, und das habe ich auch Ich habe viele einfache Datenbeiträge gesehen. Diese reichen nicht aus, um einen Einblick in die tatsächliche Situation zu erhalten. Deshalb haben wir diese Übung durchgeführt und dabei detaillierte Aufzeichnungen erstellt. Es bietet den Lesern Referenz-, Vergleichs- und Reflexionsmöglichkeiten während ihrer Praxis. Leser, die Fragen zu dieser Praxis haben, können gerne auch Fragen und Kommentare einreichen.


Das obige ist der detaillierte Inhalt vonMethoden zur Leistungsoptimierung des Laravel-Frameworks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn