PHP アプリケーションのパフォーマンスを最適化することは、高速かつ効率的なユーザー エクスペリエンスを提供するために重要です。パフォーマンスの最適化は、応答時間を改善するだけでなく、リソース消費を削減し、サーバー負荷を最小限に抑え、スケーラビリティを確保するのにも役立ちます。この記事では、PHP アプリケーションのパフォーマンスを最適化するためのさまざまなテクニックとベスト プラクティスについて説明します。
最適化に入る前に、アプリケーションのプロファイリングとベンチマークを実行して、ボトルネックや改善が必要な領域を特定することが重要です。パフォーマンスの問題がどこにあるのかを知ることで、最も重要なことに集中して取り組むことができます。
Apache Bench、Siege、または JMeter などのツールを使用してアプリケーションのストレス テストを行い、負荷がかかっている状態でアプリケーションがどのように動作するかを確認します。
プロファイリングとベンチマークにより、最適化の適切な領域に取り組んでいることを確認できます。
PHP はインタープリタ言語です。つまり、PHP スクリプトが実行されるたびに、コードが解析され、マシンコードにコンパイルされます。これにより、特に大規模なアプリケーションの場合、パフォーマンスの問題が発生する可能性があります。 オペコード キャッシュ により、リクエストごとに PHP コードを再コンパイルする必要がなくなります。
php.ini ファイルを確認し、次のように構成して、OPcache が有効になっていることを確認します。
opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000
OPcache を有効にすると、PHP スクリプトが一度コンパイルされてメモリにキャッシュされるため、応答時間が短縮されます。
データベース クエリは、多くの場合、Web アプリケーションの実行時間のかなりの部分を占めます。データベースの相互作用を最適化すると、パフォーマンスが大幅に向上する可能性があります。
インデックスは、データの取得を高速化するために非常に重要です。データベース テーブルに、頻繁にクエリされる列や JOIN 操作で使用される列に適切なインデックスがあることを確認してください。
頻繁に変更されないデータの場合は、データベースへの繰り返しのクエリを避けるために、高価なデータベース クエリの結果をキャッシュします。次のものが使用できます:
Memcached と Redis はどちらもデータをメモリに保存するため、頻繁に要求されるデータにすばやくアクセスできます。
永続的なデータベース接続により、リクエストごとに新しい接続を確立するオーバーヘッドが軽減されます。データベース接続プーリングを構成して、接続をより効率的に管理できます。
HTTP キャッシュにより、サーバーで処理する必要があるリクエストの数を大幅に減らすことができます。 HTTP 応答をキャッシュすると、ブラウザーや他のキャッシュ プロキシが同じリクエストを複数回行う代わりに応答を再利用できるようになります。
Cache-Control や Expires などの HTTP ヘッダーを使用して、ブラウザまたは中間キャッシュにコンテンツを保存して再利用するように指示します。
例:
opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000
ETag (エンティティ タグ) を使用すると、リソースが変更された場合にのみサーバーが応答を送信できるため、帯域幅が節約され、サーバーの負荷が軽減されます。
header("Cache-Control: max-age=3600, must-revalidate"); // Cache for 1 hour header("Expires: " . gmdate("D, d M Y H:i:s", time() + 3600) . " GMT");
CDN は静的リソース (画像、CSS、JavaScript ファイルなど) のコピーを分散サーバーに保存することで、PHP サーバーの負荷を軽減し、世界中のユーザーへのコンテンツ配信を高速化します。
PHP コード自体を最適化すると、パフォーマンスが大幅に向上する可能性があります。以下にいくつかの戦略を示します:
eval() 関数は PHP コードを動的に評価するため、遅くて危険です。その使用を避け、動的コード実行の代替ソリューションを見つけてください。
不要な関数呼び出しとループ、特に大規模なデータセットで繰り返し実行される関数呼び出しとループを最小限に抑えます。
PHP には、パフォーマンスの点で高度に最適化された組み込み関数が多数用意されています。利用可能な場合は、カスタム構築された関数よりもネイティブ関数を常に使用することを好みます。
次のようなリソースを大量に使用する操作に注意してください。
大きなタスクをより小さく管理しやすい部分に分割し、非同期で実行することを検討してください。
ネットワーク経由で送信する前にデータを圧縮すると、特にインターネット接続が遅いユーザーにとって、帯域幅の使用量が削減され、応答時間が短縮されます。
Gzip は広く使用されている圧縮アルゴリズムで、これを有効にすると、サーバーからの HTML、CSS、JavaScript 応答を圧縮できます。
opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000
Brotli は、Gzip よりも優れた圧縮率を提供する新しい圧縮アルゴリズムです。 Nginx や Apache などの最新の Web サーバーで有効にすることができます。
PHP のパフォーマンスはバックエンドだけの問題ではありません。フロントエンドの最適化により、ユーザー エクスペリエンスが向上し、サーバーの負荷が軽減されます。
CSS および JavaScript ファイルを縮小すると、ファイル サイズが削減され、ダウンロードが高速化されます。
ビューポートに表示される直前にのみ画像を遅延読み込みすることで、帯域幅が節約され、ページの最初の読み込み時間が短縮されます。
ページのレンダリング プロセスがブロックされないように、JavaScript ファイルを非同期的に読み込みます。
PHP-FPM (FastCGI Process Manager) は、特にトラフィックの多い Web サイトのパフォーマンスを向上させるために設計された PHP 実装です。
プール設定を調整して PHP-FPM を最適化します:
Web サーバーが多数の同時接続を処理できるように適切に設定されていることを確認してください。 Nginx または Apache の キープアライブ および ワーカー プロセス 構成を使用して、より多くのトラフィックを効率的に処理します。
PHP セッションは、特にセッション データをファイルに保存する場合に、パフォーマンスのボトルネックになることがあります。
デフォルトのファイルベースのストレージの代わりに、Redis または Memcached を使用して、セッション データをメモリに保存します。これにより、セッションの読み取りと書き込みの速度が向上します。
大規模または複雑なデータを PHP セッションに保存しないでください。重要な情報のみを保存し、軽量のセッション処理メソッドを使用します。
アプリケーションが成長するにつれて、コードベースを定期的にレビューし、リファクタリングすることが重要です。最適化できる非効率なアルゴリズム、デッドコード、または時代遅れのプラクティスを探してください。
PHP アプリケーションのパフォーマンスを最適化するには、アプリケーション スタックのさまざまな層にわたる戦略の組み合わせが必要です。プロファイリング、データベース クエリのキャッシュ、オペコード キャッシュの有効化、ネットワーク負荷の最小化、コードの最適化のためのツールを使用することで、PHP アプリケーションのパフォーマンスを大幅に向上させることができます。
これらのパフォーマンスの最適化に重点を置くことで、PHP アプリケーションは高トラフィックを処理し、応答時間を短縮し、効果的に拡張できるようになります。
以上がPHP アプリケーションのパフォーマンスを最適化する方法: ベスト プラクティスとテクニックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。