次の composer コマンド では、チュートリアル欄を使用して、composer の自動ローダーの最適化について紹介します。
オートローダーの最適化
通常、Composer のオートローダーは比較的高速に実行されます。ただし、PSR-4 および PSR-0 の自動ロード ルールにより、最終的にクラスを解析する前にファイル システムをチェックする必要があります。これにより、自動ロードの速度が非常に遅くなりますが、開発環境では、これは非常に便利なロード方法になります。新しいクラスを作成すると、ローダーは、必要な操作を必要とせずに、そのクラスをすぐに検出して使用します。オートローダー構成を再構築します。
この種の読み込みルールによって引き起こされる問題は、実稼働環境に実際に反映されます。実稼働環境では、各デプロイメントの前に構成を簡単に再構築でき、デプロイメント間で新しい構成がランダムに表示されることはありません。クラス、そのため、ファイル システムを常にチェックする必要はありませんが、通常は自動ロードをできるだけ早く完了する必要があります。
上記の理由により、Composer はオートローダー用にいくつかの最適化戦略を提供します。
注: クラスを追加または削除するときにさまざまな問題が発生するため、この記事で説明されている最適化戦略は開発環境では使用しないでください。実際、開発環境にこれらの設定を適用することで得られるパフォーマンスの向上は、それによって引き起こされる問題よりもはるかに重要です。
最適化レベル 1: クラス マップの生成
実行方法
この機能を有効にするには、いくつかのオプションがあります。
composer.json の構成で "optimize-autoloader": true を設定します。
Use -o / - -optimize-autoloader はインストールまたは更新を呼び出します。
-o / --optimize を使用して dump-autoload を呼び出します。
これは何を行うのでしょうか?
クラス マッピングの生成では、基本的に PSR-4/PSR-0 ルールがクラス マッピング ルールに変換されます。これにより、既知のクラス マップがパスを即座に返し、Composer はクラスがそこに存在することを保証できるため、すべてが大幅に高速化され、ファイル システム チェックが必要なくなります。
PHP 5.6 では、クラスマップも opcache にキャッシュされるため、初期化時間が大幅に短縮されます。 opcache が有効になっていることを確認すると、クラスマップはすぐにロードされ、クラスもすぐにロードされます。
トレードオフ
このアプローチには実際のトレードオフはありません。運用環境では常に有効にする必要があります。
唯一の問題は、自動ロード (つまり、特定のクラスが見つからないとき) を追跡しないことです。そのため、PSR-4 にフォールバックするルールによってファイルシステムのチェックが行われる可能性が依然としてあります。もっとゆっくり 。この問題を解決するには、プロジェクトに存在しないクラスに対して class_exists チェックを多数実行する場合に有効にすることを決定できる 2 つの 2 番目の最適化オプションがあります。
最適化レベル 2/A: 権限クラス マッピング
これを有効にするにはどうすればよいですか?
この機能を有効にするには、いくつかのオプションがあります。
composer.json の構成キーで "classmap-authoritative": true を設定します。
Use -a / --classmap-authoritative を呼び出してインストールまたは更新します。
-a / --classmap-authoritative を使用して dump-autoload を呼び出します。
これは何をしますか?
このオプションを有効にすると、レベル 1 クラス マップの最適化が自動的に有効になります。
このオプションは単純です。クラス図に何かが見つからない場合、それは存在せず、オートローダーは PSR-4 ルールに従ってファイル システムを調べるべきではないことを示します。
トレードオフ
このオプションを使用すると、オートローダーが常に迅速に戻ることができます。一方、何らかの理由でクラスが実行時に生成される場合、自動ロードが許可されないことも意味します。プロジェクトまたはその依存関係のいずれかがこれを行うと、運用環境で「クラスが見つからない」問題が発生する可能性があります。注意して有効にしてください。
注: これをレベル 2/B の最適化と組み合わせて使用することはできません。同じ問題を異なる方法で解決するため、どちらかを選択する必要があります。
最適化レベル 2/B: APCu キャッシュ
これを有効にするにはどうすればよいですか?
この機能を有効にするオプションがあります:
composer.json の構成キーで "apcu-autoloader": true を設定します
Use --apcu - オートローダーはインストールまたはアップデートを呼び出します。
--apcu を使用して dump-autoload を呼び出します。
これは何を行うのでしょうか?
このオプションは、APCu キャッシュをフォールバックとしてクラス マップに追加します。クラスマップは自動的に生成されないため、必要に応じてレベル 1 の最適化を手動で有効にする必要があります。
クラスが見つかるかどうかに関係なく、この事実は常に APCu にキャッシュされるため、次のリクエストですぐに返すことができます。
重量オフ
このオプションには APCu が必要ですが、機能する場合と機能しない場合があります。また、自動ロードに APCu メモリも使用しますが、安全に使用でき、上記の権威クラス マップの最適化のようにクラスが見つからなくなることはありません。
注: これをレベル 2/A 最適化と組み合わせて使用することはできません。同じ問題を異なる方法で解決するため、どちらかを選択する必要があります。
以上がComposer オートローダーの最適化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。