パフォーマンス
Symfony は非常に高速です。もちろん、本当に速度が必要な場合は、Symfony を高速化する方法がたくさんあります。この章では、Symfony プログラムを高速化するいくつかの方法を検討します。
バイト コード キャッシュ (OPcache など) を使用する ¶
パフォーマンスを向上させるときに最初に行うべきことは、「バイト コード キャッシュ」を使用することです。これらのキャッシュにはコンパイルされた PHP ファイルが保存され、リクエストごとに再度コンパイルされることを回避します。
利用可能な バイト コード キャッシュ が多数あり、その一部はオープン ソースです。 PHP 5.5 以降、PHP には OPcache が組み込まれています。古いバージョンで最も広く使用されているバイト コード キャッシュは APC です。
バイトコードキャッシュの使用にはすべての長所と短所があり、Symfony は「このタイプの環境で非常に優れたパフォーマンスを発揮する」ように構築されています。
ソース ファイルの変更を監視する ¶
ほとんどのバイト コード キャッシュは、ソース ファイルの変更を監視します。これにより、ファイルのソース コードが変更された場合でも、バイト コードが自動的にコンパイルされるようになります。これは非常に便利ですが、少し負荷がかかりすぎます。
したがって、一部のバイト コード キャッシュには、これらのチェックをオフにするオプションが用意されています。たとえば、APC のチェックインをオフにするには、apc.stat=0
を php.ini
構成ファイルに直接追加します。
これらのチェックがオフになっている場合、「ソース ファイルが変更されたときにキャッシュが確実にクリアされるようにする」のはサーバー管理者の責任です。そうしないと、更新内容がプログラムに表示されなくなります。
同様に、プログラムのデプロイ時にバイト コード キャッシュをクリアする必要があります (たとえば、APC を使用する場合は apc_clear_cache()
PHP 関数を呼び出し、Opcache を使用する場合は opcache_reset( )
)。
PHP では、コマンド ラインと Web プロセスは同じ OPcache を共有しません。これは、ターミナルで特定のコマンドを実行しても、Web サーバー上の OPcache をクリアできないことを意味します。サーバーを再起動するか、Web サーバー経由で apc_clear_cache()
または opcache_reset()
関数を呼び出すことができます (たとえば、Web スクリプトの実行時にこれらの関数を含める場合)。
Symfony で使用されるすべてのファイルを最適化する ¶
デフォルトでは、PHP の OPcache はバイト コード キャッシュに 2000 個のファイルを保存します。この数値は通常の Symfony アプリケーションにはまだ小さすぎるため、opcache.max_accelerated_files 設定オプションをより高い値に設定する必要があります:
; php.iniopcache.max_accelerated_files = 20000
PHP リアルパス キャッシュの設定 ¶
PHP は内部キャッシュを使用して、「クラス ファイル パス」を「実際のファイル システム パス」にマッピングした結果を保存します。これにより、特に Windows プラットフォーム上で、多くの PHP ファイルを開く Symfony のようなプログラムのパフォーマンスが向上します。
デフォルトでは、PHP は 16K
realpath_cache_size
を設定しますが、これは Symfony にとって小さすぎます。この値を少なくとも 4096K
に更新します。さらに、キャッシュ パスはデフォルトで 120
秒間のみ保存されます。また、realpath_cache_ttl
オプションを使用してこの値を更新することも検討してください:
; php.ini realpath_cache_size=4096K realpath_cache_ttl=600
Composer のクラス マッピング関数を使用します ¶
デフォルトでは、Symfony Standard Edition は autoload.php ファイル内の Composer オートローダー (オートローダー) を使用します。このローダーは、登録されたディレクトリに配置された新しいクラスを自動的に検索するため、使いやすいです。
残念ながら、これにはコストがかかります。クラスローダーは、特定のファイルを見つけるために、設定された名前空間全体を走査し、最終的にファイルを見つけるまで file_exists()
呼び出しを行う必要があるためです。希望のファイル。
最も簡単な解決策は、最適化された「クラス マップ」(クラス マップ) を構築するように Composer に指示することです。これは、すべてのクラスの場所の大きな配列であり、vendor/composer/autoload_classmap に保存されます。 php
で。
このクラス マップはコマンド ラインから生成でき、展開プロセスの一部となる場合があります。
1 | ## |
1 | #include_once __DIR__.'/../var/bootstrap.php.cache'; |