Share Composer autoload 自動読み込みパフォーマンス最適化ガイド

藏色散人
リリース: 2020-08-05 13:10:51
転載
3026 人が閲覧しました

composer の次のチュートリアル コラムでは、composer autoload の自動読み込みパフォーマンス最適化ガイドを紹介します。困っている友人の役に立てば幸いです。

Share 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 を使用することをお勧めします。

#いくつかのヒント

    レベル 2 の最適化は基本的にレベル 1 の最適化を補足するものであり、レベル 2/A は主にクラスマップでターゲット クラスが見つからない場合、検索を続行するかどうかの決定レベル 2/B は主にキャッシュ メカニズムを提供します。ターゲット クラスがクラスマップで見つからない場合、クラスマップで見つかったファイル パスをキャッシュします。ファイル システム。以降の検索が高速化されます。
  • Level-2/A が実行されると、クラスマップ内で見つからない場合は検索を続行しないことを意味します。このとき、Level-2/B は発効しません。
  • どんな状況であっても、opcache を有効にすることをお勧めします。これにより、クラスの読み込み速度が大幅に向上します。私は、少なくとも 10 倍のパフォーマンス向上を視覚的に測定しました。

以上がShare Composer autoload 自動読み込みパフォーマンス最適化ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:dahouduan
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート