更新版の記事を載せます。
https://qiita.com/ProjectEuropa/items/2f3b3fdbae8831e5fe7f
概要
12 Tips for Laravel Performance Optimization in 2020
から引っ張ってきたものです。結構Google翻訳の質が向上していた。
掻い摘んで抜粋していきます。
目次
- 構成キャッシング
- ルートキャッシング
- 未使用のサービスを削除
- クラスマップの最適化
- Composer最適化オートロード
- 含まれるライブラリを制限する
- JITコンパイラ
- Fast Cache and Sessionドライバーを選択する
- クエリ結果のキャッシュ
- Eager loadingを使用する
- アセットのプリコンパイル
- PHPの最新バージョンを実行する
- CDNを使う
- アセットバンドル
- ファイル圧縮
- PHPの最新バージョンを実行する
- Laravelデバッグバー
- Laravelの一般的なパフォーマンスチューニングのヒント
12のヒントという割には結構項目が多い...
前提条件
- Laravel 5.5
- PHP 7.1
- MySQL (Version不明)
1. 構成キャッシング
Artisan Cache Configでパフォーマンスを向上させます。
$ php artisan config:cache
設定を更新する場合は、キャッシュをクリアしましょう。
$ php artisan config:clear
アプリケーションをさらに最適化するには、PHPコードをキャッシュするOPcacheを使用して、再コンパイルする必要がないようにします。
OPcache PHP公式ドキュメント
2. ルートキャッシング
$ php artisan route:cache
configまたはroutesファイルが変更されるたびにコマンドを実行することを忘れないでください。
キャッシュをクリアするには、次のコマンドを使用します。
$ php artisan route:clear
3. 未使用のサービスを削除
設定ファイルで未使用のサービスを必ず無効にしてください。
使用していないサービスプロバイダーにコメントアウトを追加します。
4. クラスマップの最適化
$ php artisan optimize --force
5. Composer最適化オートロード
$ composer dumpautoload -o
6. 含まれるライブラリを制限する
ライブラリなしで実行できると思われる場合は、 config/app.php
から削除してLaravelアプリを高速化します。もう1つの重要な場所はcomposer.json
です。
7. JITコンパイラ
Laravelアプリの場合、推奨されるJITコンパイラはFacebookのHHVMです。
@ytake さんからの指摘です。
HHVM4.0以降はPHPの動作をサポートしていませんので、
現時点でHHVM上でLaravelを動かすのはお勧めしません。(PHPのコードはもう動きません)
現在の最新バージョンはPHP互換環境ではなくなっていますよ。
8. Fast Cache and Sessionドライバーを選択する
Laravel5のパフォーマンスのための最速のキャッシュおよびセッションドライバーはMemcachedだと思われます。
セッションドライバーを変更するためのドライバーキーは、通常 app/config/session.php
にあります。同様に、キャッシュドライバーを変更するためのドライバーキーは app/config/cache.php
にあります。
9. クエリ結果のキャッシュ
頻繁に実行されるクエリの結果をキャッシュすることは、Laravel5.5のパフォーマンスを向上させる優れた方法です。
次のように使用される記憶機能をお勧めします。
$posts = Cache::remember('index.posts', 30, function(){
return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();
});
10. Eager loadingを使用する
Eloquentは最初のクエリに応答して、関連付けられているすべてのオブジェクトモデルを取得します。これにより、アプリケーションの応答が増加します。
遅延ローディングの例です。
$books = App\Book::all();
foreach ($books as $book) {
echo $book->author->name;
}
Eager loadingの例です。
$books = App\Book::with('author')->get();
foreach ($books as $book) {
echo $book->author->name;
}
11. アセットのプリコンパイル
$ php artisan optimize
$ php artisan config:cache
$ php artisan route:cache
12. CDNを使う
CDNサーバーから静的アセットファイルをロードすると(ファイルをホストするサーバーから直接ロードするのではなく)、Laravelアプリケーションのパフォーマンスが向上します。
13. アセットバンドル
Laravel Mixで複数のスタイルシートやJSファイルを1つのファイルに効率的に連結できます。
mix.styles([
'public/css/vendor/normalize.css',
'public/css/styles.css'
], 'public/css/all.css');
14. ファイル圧縮
Laravel Mixを使用してアセットを縮小できます。
$ npm run production
15. PHPの最新バージョンを実行する
PHPの最新バージョンでは、パフォーマンスが大幅に向上しています。したがって、Laravelアプリケーションが最新バージョンのPHPを実行していることを確認して、アプリケーションの新しいバージョンで導入されたすべてのパフォーマンス改善を活用できるようにします。
16. Laravelデバッグバー
最適化手法ではなく、パッケージです。Laravel Debugbarは、PHPデバッグバーをLaravel 5と統合するためのパッケージです。
ServiceBarには、デバッグバーを登録して出力に添付するServiceProviderが含まれています。
Laravelパフォーマンスモニターとして使用できるパッケージです。アプリケーションの開発中にこのパッケージを使用することをお勧めします。
これにより、アプリケーションの実行状況を簡単に検査して、それに応じて改善することができます。
17. Laravelの一般的なパフォーマンスチューニングのヒント
Webサイトのパフォーマンスを最適化するには、次のようないくつかの調整を実装するだけです。
- Laravelページスピードコンポーザーパッケージ
- プロバイダーの詳細を更新する
- パッケージを公開する
- ミドルウェアを登録する
- ページ上にルートを作成する
- ブレードファイルを作成
- アプリを実行
Laravelページスピードコンポーザーパッケージ
Composerを使用して、renatomarinho/laravel-page-speed
パッケージをダウンロードと展開します。
$ composer require renatomarinho/laravel-page-speed
プロバイダーの更新
config/app.php
ファイルに移動し、サービスプロバイダーとエイリアスを展開します。
'providers' => [
....
....
RenatoMarinho\LaravelPageSpeed\ServiceProvider::class,
パッケージの公開
$ php artisan vendor:publish --provider="RenatoMarinho\LaravelPageSpeed\ServiceProvider"
Webアクセス用のミドルウェアを追加し、ルーティングに追加する
protected $middlewareGroups = [
'web' => [
........
........
\RenatoMarinho\LaravelPageSpeed\Middleware\InlineCss::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\ElideAttributes::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\InsertDNSPrefetch::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\RemoveComments::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\TrimUrls::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\RemoveQuotes::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\CollapseWhitespace::class,
]
]
// Define Route
// I going to add a route to check Optimized Website Speed and Performance in Laravel 5.5
Route::get('/listView', function () {
return view('listView');
});
カスタムスタックによるパフォーマンスの向上
ThunderStackとして知られるカスタムスタックは、Laravelアプリのパフォーマンスを向上させるように設計されています。受賞したレシピは、ApacheとNGINX、Varnish、Memcachedで構成されています。
参考
12 Tips for Laravel Performance Optimization in 2020
感想とか
Laravelアプリが遅い。重い。
色々言われている所もあると思いますが、パフォーマンスチューニングで実施できることは結構ありますね。
すっごい遅いし重いしLaravelクッソだなぁと思ってブーメラン