ホームページ > 記事 > PHPフレームワーク > Laravelアプリケーションのパフォーマンスを向上させる
Laravel を開発に使用することは、効率的で楽しい経験です。
アプリケーションをデプロイする準備ができたときに、アプリケーションが実際の環境では適切に動作しない可能性があることに気づくことがよくあります。
理解する必要があるのは、特効薬はないということです。アプリの細部に至るまですべての最適化を適切に行おうとすると、速度が遅くなる可能性がありますが、これらのヒントを使用すれば、適切な最適化が可能になります。
Laravel の設定項目は数十の設定ファイルに分散されており、各リクエストで各ファイル 含む
をインポートするのにパフォーマンスが消費されます。すべての構成ファイルを 1 つにマージするには、次のコマンドを使用できます。
php artisan config:cache
構成ファイルを変更しても、既存の構成ファイル キャッシュには影響しないことに注意してください。キャッシュを更新するには、上記のコマンドを繰り返します。キャッシュを完全にクリアしたい場合は、次を実行します:
php artisan config:clear
laravel では、ルーティングにも高価なオーバーヘッドが必要です。
php artisan route:cache
を使用して、routes.php ファイルをキャッシュします。クロージャでは機能しないことに注意してください。クロージャを使用している場合は、クロージャをコントローラに移動する良い機会です。これは、正しいコントローラ メソッドではなくクロージャにバインドされたパスをコンパイルしようとすると、artisan コマンドが例外をスローするためです。
キャッシュの設定と同様に、routes.php を変更しても影響はありません。キャッシュを更新するには、パス ファイルを変更するたびに上記のコマンドを実行します。ルーティング キャッシュを完全に削除するには、次のコマンドを実行します。
php artisan route:clear
中規模のプロジェクトでは、数百の PHP ソース ファイルが存在するのが通常です。プログラミングの習慣に従ってコードを分割し、各 PHP ファイルには独自の責任があります。もちろん、これには欠点がないわけではなく、Laravel はリクエストごとにこれらの数百のファイルをロードする必要があり、これは非常にパフォーマンスを消費します。
したがって、より良い方法は、ユーザーがリクエストするたびにどのファイルをロードする必要があるかを宣言し(サービスプロバイダー、ミドルウェアなど)、毎回ロードする必要があるこれらのファイルを記述することです。同じファイル内で、インクルード ファイルの数を減らします。
これは、JavaScript がファイルを差分なく 1 つにマージするのと似ており (webpack、gulp)、ブラウザーとサーバーのリクエストを削減します。
他のソース ファイルを追加する必要がある場合は、config/compile.php のファイル キーで宣言できます。
リクエストごとにロードする必要があるファイルを設定すると、それらは同じファイルに書き込まれるため、ファイルのロードによるパフォーマンスの消費が削減されます。
php artisan optimize --force
これは、laravel だけでなく、composer を使用するすべてのアプリケーションに当てはまります。
まず、PSR-4 オートローダーがどのように機能するかを説明し、次にそれを最適化するために実行する必要があるコマンドを示します。 Composer がどのように機能するかを理解することに興味がない場合は、コンソール コマンドに関する段落に直接スキップすることをお勧めします。
compsoser から App\Controllers\AuthController クラスをリクエストすると、最初にクラス マップで直接の関連付けが検索されます。 classmap は、クラスとファイルの 1 対 1 の連想配列です。もちろん、Login クラスとその関連ファイルをクラス マップに手動で追加していないため、composer はネームスペース内での検索を続けます。
App は Laravel にデフォルトで付属する PSR-4 名前空間であり、app/ フォルダーに関連付けられているため、composer は PSR-4 クラス名の変換を試行します。基本的な文字列操作手順を使用してファイル名を変換します。最後に、App\Controllers\AuthController は、Controllers/ フォルダーにある AuthController.php ファイル内にある必要があると推測します。これは、偶然にも、これはたまたま名前空間フォルダー、つまり app/ にあります。
このすべての大変な作業は、app/Controllers/AuthController.php ファイルに存在する App\Controllers\AuthController クラスを取得するためだけに行われます。 Composer がアプリケーション全体をスキャンし、クラスとファイルの直接 1 対 1 の関連付けを作成するには、次のコマンドを実行します。
composer dumpautoload -o
すでに php 職人の最適化を実行している場合は、覚えておいてください。 -force の場合、この関数を再度実行する必要はありません。これは、optimize コマンドがすでに Composer に最適化されたオートローダーを作成するように指示しているためです。
PHP はコンピュータによって自然に理解されるわけではありません。これをバイトコードにコンパイルしてコンピュータで実行させることはできません。 PHP は、PHP ファイルを解釈して対応する C ルーチンを実行する Zend エンジンなどの仲介手段を経由する必要があります。ご想像のとおり、遅いです。サーバーが PHP ファイルを実行するたびに、それをトークンに変換する必要があります。このプロセスは AST パーサーによって実行され、解釈されます。残念ながら、たとえ毎回同じ結果が得られるとしても、パーサーは毎回 PHP ファイルをコンパイルする必要があります。
アプリケーションを高速化するには、一度コンパイルして永久に実行するアプローチが必要です。これを行うのが JIT コンパイラーです。
对于 Laravel 所推荐使用的 JIT 编译器是 HHVM,由 Facebook 创立并广泛使用。Wikipedia、Etsy 和其他上千项目也在使用它。
将 session 保存在文件中是种足够快速而又优雅的方法,自 PHP 开始的时代就在这样做了。但是如果你追求性能,那么文件系统就是你需要注意的一件事,因为它很慢。一种更好的做法是将 cache 和 session 存储在内存中,因为它提供了一种高效读写数据的方式。幸运的是,laravel 支持一些基于内存的 cache 和 session 驱动。
我的建议是使用 memcached 作为 cache 和 session 的驱动,但你可以选择任何你喜欢的,只要它是基于内存工作的。
要更改 session 驱动,需要检查以下文件中「driver」项:
app/config/session.php
要更改 cache 驱动,需要检查以下文件中「driver」项:
app/config/cache.php
就像你看到的,大部分优化都是在不同的层面使用缓存。但当面临数据库优化时,你不应该依赖缓存。缓存应是优化查询的最后手段。
MySQL 不会替你做这件事,也不如你自己做的好。当然了你肯定不会把应用中每个查询的结果都做缓存,看看数据统计,在应用程序中那些高频率的查询语句,它们真的有必要被频繁地执行?每 15 分钟运行一次然后把相同的结果提供给用户
不是更好吗?
在查询构造器中移除了 removing
方法是件好事(它曾经是个很好的功能,但不够好 - 人们似乎高估了它的作用)。然后你可以更多地使用 Cache::remember
方法,就像这样:
$posts = Cache::remember('index.posts', 30, function() { return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get(); });
更多Laravel相关技术文章,请访问Laravel教程栏目进行学习!
以上がLaravelアプリケーションのパフォーマンスを向上させるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。