オートローダー最適化
本番環境へデプロイする場合、アプリケーションの自動ロードを高速化するクラスマップを作成して、Composerが、指定されたクラスのファイルを素早く見つけ、ロードできるようにします。
$ composer install --optimize-autoloader --no-dev
もしくはcomposer.jsonの中身において
{
"config": {
"optimize-autoloader": true
}
}
と設定すれば
$ composer install --no-dev
で済みます。
上記コマンドを実行すると、return arrayの箇所に変更が入り、クラスマップを作成してくれます。
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'App\\Console\\Kernel' => $baseDir . '/app/Console/Kernel.php',
'App\\Enums\\Constant' => $baseDir . '/app/Enums/Constant.php',
'App\\Exceptions\\FileUploadException' => $baseDir . '/app/Exceptions/FileUploadException.php',
'App\\Exceptions\\Handler' => $baseDir . '/app/Exceptions/Handler.php',
... 中略 ...
);
他にも以下のファイルにも変更が入るようです。
vendor/composer/autoload_files.php
vendor/composer/autoload_namespaces.php
vendor/composer/autoload_psr4.php
vendor/composer/autoload_real.php
-
no-devを使用すると、required-dev内のパッケージのインストールは全てスキップされます。(開発で使用されるパッケージは削除されます)
-
class not foundのエラーが出た時は、対象のオートロードに開発時のみ必要とするパッケージを参照する必要が出てきてしまった、というパターンが多いです。その時は、対象のライブラリをrequire-devからrequireに移動させる必要があります。
$ composer require {対象ライブラリ}
その後、再度オートローダー最適化を行うと良い。
設定ローディングの最適化
$ php artisan config:cache
上記のコマンドで生成されるファイルの中身は以下の通りです。
<?php return array (
'app' =>
array (
'name' => 'SAMPLE PROJECT',
'env' => 'local',
'debug' => true,
'url' => 'http://localhost',
'asset_url' => NULL,
'timezone' => 'Asia/Tokyo',
'locale' => 'ja_JP',
'fallback_locale' => 'ja_JP',
'faker_locale' => 'ja_JP',
'key' => 'base64:vE9tPBe2snc5C+AVFhuGSAUzuocPX5R7yjeFLvZ0nTU=',
'cipher' => 'AES-256-CBC',
'maintenance' =>
array (
'driver' => 'file',
),
'providers' =>
array (
0 => 'Illuminate\\Auth\\AuthServiceProvider',
1 => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
... 中略 ...
)
);
このコマンドは、.envやconfig配下の全設定ファイルを1つのファイルへまとめるため、設定値をロードする場合に、数多くのファイルにアクセスする手間を減らします。
また、このキャッシュファイルがあれば元の.envは読み込まなくなります。
ルートロードの最適化
$ php artisan route:cache
上記のコマンドで生成されるファイルの中身は以下の通りです。
<?php
/*
|--------------------------------------------------------------------------
| Load The Cached Routes
|--------------------------------------------------------------------------
|
| Here we will decode and unserialize the RouteCollection instance that
| holds all of the route information for an application. This allows
| us to instantaneously load the entire route map into the router.
|
*/
app('router')->setCompiledRoutes(
array (
'compiled' =>
array (
0 => false,
1 =>
array (
'/sanctum/csrf-cookie' =>
array (
0 =>
array (
0 =>
array (
'_route' => 'sanctum.csrf-cookie',
),
1 => NULL,
2 =>
array (
'GET' => 0,
'HEAD' => 1,
),
3 => NULL,
4 => false,
5 => false,
6 => NULL,
),
),
... 中略 ...
)
);
routeの数が大きいプロジェクトではパフォーマンスの改善に期待できる仕組みです。
ビューロードの最適化
$ php artisan view:cache
このコマンドは全Bladeファイルをコンパイルします。
要求ごとにコンパイルしなくて済むため、ビューを返すリクエストすべてにおいてパフォーマンスが向上します。
以上