composer の次のチュートリアル コラムでは、composer autoload の自動読み込みパフォーマンス最適化ガイドを紹介します。困っている友人の役に立てば幸いです。
Composer が提供する自動ロード メカニズムは、コードを整理したり、新しいクラス ライブラリを導入したりするのに非常に便利ですが、プロジェクトのパフォーマンスも大幅に低下させます。 コンポーザーの自動ロードが遅い主な理由は、PSR-0 と PSR-4 のサポートによるものです。ローダーはクラス名を取得するときに、ファイル システム内で対応するクラス ファイルの場所を見つける必要があります。もちろん、パフォーマンスは低下しますが、これは開発中にはまだ役に立ち、追加した新しいクラス ファイルをすぐに有効にすることができます。しかし、本番モードでは、これらのクラス ファイルを見つけて、できるだけ早くロードする必要があります。 そのため、composer にはいくつかの最適化戦略が用意されており、これらの最適化戦略については以下で説明します。第 1 レベル (レベル 1) の最適化: クラスマップの生成
実行方法:
コマンドの実行 combos dump-autoload -o (-o は --optimize と同等です)
原則:
このコマンドの本質は、PSR-4 を変換することです。 /PSR- 0 のルールはクラスマップ ルールに変換されます。クラスマップにはすべてのクラス名とクラス ファイル パス間の対応が含まれるため、ローダーはファイル システム内のファイルを検索する必要がなくなりました。クラス ファイルへのパスは、クラスマップから直接見つけることができます。注意事項
opcache を有効にすることをお勧めします。これにより、クラスの読み込みが大幅に高速化されます。 php5.5 以降のバージョンには、デフォルトで opcache が付属しています。 このコマンドは、ターゲット クラスがクラスマップに見つからない場合の状況を考慮していません。ローダーがターゲット クラスを見つけられない場合でも、PSR の規則に従ってファイル システムに移動します。 4/PSR-0. 検索第 2 レベル (レベル 2/A) 最適化: 権威 (Authoritative) クラスマップ
コマンドの実行:
コマンドを実行しますcomposer dump-autoload -a (-a は --classmap-authoritative と同等です)
原則
非表示にするには、このコマンドを実行します。レベル 1 コマンドも実行されます。つまり、クラスマップも生成されます。違いは、ローダーがクラスマップ内でターゲット クラスを見つけられない場合、ファイル システム内で検索を行わないことです (つまり、クラスマップも生成されます)。 、クラスマップはすべて正当なクラスであると暗黙的に信じられ、不正に呼び出されない限り他のクラスは存在しません)注意事項
プロジェクトが実行時にクラスを生成する場合、これを使用してください。最適化戦略では、これらの新しく生成されたクラスは見つかりません。第 2 レベル (レベル 2/B) の最適化: APCu キャッシュの使用
コマンドの実行:
コマンドの実行composer dump-autoload --apcu
原則:
この戦略を使用するには、apcu 拡張機能をインストールする必要があります。 apcu はメモリの一部として理解でき、複数のプロセス間で共有できます。 Level-1 のクラスマップで目的のクラスが見つからなかった場合に、ファイルシステムで見つかった結果を共有メモリに保存し、次回の検索時にメモリから直接取得できるようにする戦略です。 . ファイル システム内を再度検索することなく戻ります。 本番環境では、この戦略は通常、Level-1 と併用されます。composer dump-autoload -o --apcu を実行します。このようにして、本番環境で新しいクラスが生成されても、ファイルシステムが必要ですが、一度検索すればキャッシュできるので、Level-2/Aの欠点を補えます。最適化戦略はどのように選択すればよいですか?
プロジェクトの実際の状況に基づいて戦略を選択する必要があります。プロジェクトの実行時にクラス ファイルが生成されず、ロードに Composer の自動ロードが必要な場合は、レベル 2/A を使用してください。それ以外の場合は、レベル 1 とレベル 2/B を使用することをお勧めします。 #いくつかのヒント
以上がShare Composer autoload 自動読み込みパフォーマンス最適化ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。