Heim > PHP-Framework > Laravel > Hauptteil

Verbessern Sie die Leistung der Laravel-Anwendung

步履不停
Freigeben: 2019-06-23 13:53:37
Original
3600 Leute haben es durchsucht

Verbessern Sie die Leistung der Laravel-Anwendung

Die Verwendung von Laravel für die Entwicklung ist eine effiziente und angenehme Erfahrung.
Wenn Sie bereit sind, eine Anwendung bereitzustellen, stellen Sie möglicherweise fest, dass die Anwendung in realen Umgebungen möglicherweise nicht gut funktioniert.

Was man verstehen muss, ist, dass es kein Allheilmittel gibt. Wenn Sie versuchen, alle Optimierungen für jedes Detail Ihrer App richtig zu machen, wird sie möglicherweise langsamer, aber mit den folgenden Tipps kommen Sie genau richtig.

Cache-Konfigurationsdatei

Die Konfigurationselemente von Laravel sind in Dutzenden von Konfigurationsdateien verteilt und es verbraucht Leistung, jede Datei including in jede Anfrage einzubinden. Um alle Konfigurationsdateien zu einer zusammenzuführen, können Sie Folgendes verwenden:

php artisan config:cache
Nach dem Login kopieren

Denken Sie daran, dass das Ändern der Konfigurationsdatei keine Auswirkungen auf den vorhandenen Konfigurationsdatei-Cache hat. Um den Cache zu aktualisieren, wiederholen Sie den obigen Befehl. Wenn Sie den Cache vollständig leeren möchten, führen Sie Folgendes aus:

php artisan config:clear
Nach dem Login kopieren

Routen-Cache

In Laravel erfordert das Routing auch teuren Overhead. Zwischenspeichern Sie die Datei „routes.php“ mit:

php artisan route:cache
Nach dem Login kopieren

Bitte beachten Sie, dass dies nicht mit Schließungen funktioniert. Wenn Sie Abschlüsse verwenden, ist dies eine gute Gelegenheit, diese in den Controller zu verschieben, da der Befehl artisan eine Ausnahme auslöst, wenn er versucht, den an den Abschluss gebundenen Pfad anstelle der richtigen Controller-Methode zu kompilieren.
Änderungen an der Routes.php haben wie beim Konfigurieren des Caches keine Auswirkungen. Um den Cache zu aktualisieren, führen Sie den obigen Befehl jedes Mal aus, wenn Sie die Pfaddatei ändern. Um den Routing-Cache vollständig zu bereinigen, führen Sie den folgenden Befehl aus:

php artisan route:clear
Nach dem Login kopieren

Optimierung des Ladens von Klassenkarten

In einem mittelgroßen Projekt ist es aus guten Gründen normal, Hunderte von PHP-Quelldateien zu haben Entsprechend den Programmiergewohnheiten werden wir den Code trennen und jede PHP-Datei hat ihre eigenen Verantwortlichkeiten. Dies ist natürlich nicht ohne Nachteile. Diese Hunderte von Dateien muss Laravel bei jeder Anfrage laden, was sehr leistungsintensiv ist.

Daher besteht eine bessere Möglichkeit darin, zu deklarieren, welche Dateien bei jeder Benutzeranfrage geladen werden müssen (z. B. Dienstanbieter, Middleware usw.), und dann diese Dateien zu schreiben, die jedes Mal geladen werden müssen. Reduzieren Sie in derselben Datei die Anzahl der Include-Dateien.

Dies ähnelt dem Zusammenführen von Dateien in einer einzigen Datei ohne Unterschied (Webpack, Gulp), wodurch Browser- und Serveranfragen reduziert werden.

Wenn Sie weitere Quelldateien hinzufügen müssen, können Sie diese im Dateischlüssel von config/compile.php deklarieren.

Wenn Sie die Dateien festlegen, die für jede Anfrage geladen werden müssen, werden sie in dieselbe Datei geschrieben, wodurch der Leistungsverbrauch beim Laden von Dateien reduziert wird

php artisan optimize --force
Nach dem Login kopieren

Optimieren Sie das automatische Laden von Composer

Dies gilt nicht nur für Laravel, sondern für jede Anwendung, die Composer verwendet.

Ich erkläre zunächst, wie der PSR-4-Autoloader funktioniert, und zeige Ihnen dann, welche Befehle Sie ausführen sollten, um ihn zu optimieren. Wenn Sie nicht daran interessiert sind, die Funktionsweise von Composer zu verstehen, empfehle ich Ihnen, direkt zum Absatz über Konsolenbefehle zu springen.

Wenn Sie die Klasse AppControllersAuthController von Composer anfordern, durchsucht dieser zunächst die Klassenzuordnung nach der direkten Zuordnung. Classmap ist ein 1:1 assoziatives Array von Klassen und Dateien. Da Sie die Login-Klasse und die zugehörigen Dateien nicht manuell zur Klassenzuordnung hinzugefügt haben, sucht Composer natürlich weiterhin im Namespace.

Da App ein PSR-4-Namespace ist, der standardmäßig mit Laravel geliefert wird und mit dem Ordner app/ verknüpft ist, wird Composer versuchen, die PSR-4-Klasse zu konvertieren Namen in Dateinamen mithilfe grundlegender Verfahren zur Zeichenfolgenmanipulation umwandeln. Schließlich wird vermutet, dass sich AppControllersAuthController in der Datei AuthController.php befinden muss, die sich im Ordner Controllers/ befindet, der sich zufälligerweise in befindet der Namespace-Ordner, also app/.

All diese harte Arbeit, nur um die Klasse AppControllersAuthController in der Datei app/Controllers/AuthController.php vorhanden zu machen. Damit Composer die gesamte Anwendung scannen und eine direkte 1-zu-1-Zuordnung von Klassen und Dateien erstellen kann, führen Sie den folgenden Befehl aus:

composer dumpautoload -o
Nach dem Login kopieren

Denken Sie daran, wenn Sie bereits php artisan activate - ausgeführt haben. -force, dann müssen Sie diese Funktion nicht erneut ausführen. Denn der Optimierungsbefehl weist Composer bereits an, einen optimierten Autoloader zu erstellen.

JIT-Compiler (Just-in-Time-Compiler)

PHP wird von Computern natürlich nicht verstanden. Sie können es nicht in Bytecode kompilieren und vom Computer ausführen lassen. PHP muss einen Vermittler wie die Zend-Engine durchlaufen, der die PHP-Datei interpretiert und die entsprechende C-Routine ausführt. Wie Sie sich vorstellen können, ist es langsam. Jedes Mal, wenn Ihr Server eine PHP-Datei ausführt, muss er diese in Token konvertieren – dieser Vorgang wird vom AST-Parser durchgeführt und interpretiert. Leider muss der Parser die PHP-Datei jedes Mal neu kompilieren, auch wenn er jedes Mal das gleiche Ergebnis erhält.

Um Ihre Anwendung schneller zu machen, benötigen Sie einen Einmal kompilieren, lebenslang ausführen-Ansatz, und genau das macht ein JIT-Compiler.

对于 Laravel 所推荐使用的 JIT 编译器是 HHVM,由 Facebook 创立并广泛使用。Wikipedia、Etsy 和其他上千项目也在使用它。

使用更快的缓存和会话驱动

将 session 保存在文件中是种足够快速而又优雅的方法,自 PHP 开始的时代就在这样做了。但是如果你追求性能,那么文件系统就是你需要注意的一件事,因为它很慢。一种更好的做法是将 cache 和 session 存储在内存中,因为它提供了一种高效读写数据的方式。幸运的是,laravel 支持一些基于内存的 cache 和 session 驱动。

我的建议是使用 memcached 作为 cache 和 session 的驱动,但你可以选择任何你喜欢的,只要它是基于内存工作的。

要更改 session 驱动,需要检查以下文件中「driver」项:

app/config/session.php
Nach dem Login kopieren

要更改 cache 驱动,需要检查以下文件中「driver」项:

app/config/cache.php
Nach dem Login kopieren

不要低估通过优化查询语句带来的查询速度的提升

就像你看到的,大部分优化都是在不同的层面使用缓存。但当面临数据库优化时,你不应该依赖缓存。缓存应是优化查询的最后手段。

缓存查询结果

MySQL 不会替你做这件事,也不如你自己做的好。当然了你肯定不会把应用中每个查询的结果都做缓存,看看数据统计,在应用程序中那些高频率的查询语句,它们真的有必要被频繁地执行?每 15 分钟运行一次然后把相同的结果提供给用户
不是更好吗?

在查询构造器中移除了 removing方法是件好事(它曾经是个很好的功能,但不够好 - 人们似乎高估了它的作用)。然后你可以更多地使用 Cache::remember 方法,就像这样:

$posts = Cache::remember('index.posts', 30, function()
{
    return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();
});
Nach dem Login kopieren

更多Laravel相关技术文章,请访问Laravel教程栏目进行学习!

Das obige ist der detaillierte Inhalt vonVerbessern Sie die Leistung der Laravel-Anwendung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!