高速性が PHP の最大の利点であることは誰もが知っています。一般に、PHP は Web コンテンツの動的な生成をサポートするのに常に十分な速度を備えており、多くの場合、PHP よりも高速な方法を見つけることさえできません。
しかし、大量のトラフィック、高負荷のアプリケーション、帯域幅の制限、その他パフォーマンスのボトルネックを引き起こすさまざまな要因に直面しなければならない場合、サイトを実行するために何かできることはないかと自問するかもしれません。より良い。おそらく、非常に目立たない無料モジュールを追加するだけで、PHP アプリケーションのパフォーマンスと Web サーバーの応答速度が大幅に向上するでしょう。
この記事では、PHP アプリケーションのパフォーマンスをさらに向上させ、ユーザーにより良いブラウジング エクスペリエンスを提供する方法について説明します。この記事では、PHP アプリケーションのパフォーマンスを向上させるためのさまざまなテクノロジーをコードの最適化、キャッシュ、コンテンツの圧縮の 3 つの側面から説明し、さまざまな分野でよく知られている製品を紹介します。
コードの最適化
まず、コードの最適化について見てみましょう。ここでのコードの最適化は、コードをより美しくすることを意味するものではないことに注意してください。これはおそらくすでに知られており、これ以上議論する必要はないためです。また、速度の問題をすでに考慮している場合は、すでに検討している可能性があります。 PHP ソース コードに変更を加え、いくつかの最適化を行いました。
ただし、Zend Optimizer など、一部のツールはこれらの複雑なタスクを自動的に完了するのに役立ちます。 Zend Optimizer は Zend Technologies から無料で入手できますが、ライセンス契約に同意する必要があり、GPL に基づいて配布されていないことに注意してください。 Zend Optimizer は、Zend Engine のランタイム コンパイルによって生成された中間コードを取得し、中間コードの実行効率が向上するように最適化します。
ここで追加する 3 行目のコードはオプションです。 zend_loader を無効にすると、Zend Optimizer が少し高速になるようです。そのため、この行を php.ini に追加する価値があります。注: zend_loader を無効にできるのは、Zend Encoder Runtime を使用していない場合のみです。
キャッシュ
巨大な PHP アプリケーションのパフォーマンスを向上させたい場合は、キャッシュを使用することも良い方法です。 Zend Cache、APC、Afterburner Cache など、多くのキャッシュ ソリューションが利用可能です。
これらの製品はすべて「キャッシュ モジュール」です。 .php ファイルに対するリクエストが最初に発生すると、Web サーバーのメモリに PHP 中間コードが保存され、その後のリクエストには「コンパイルされた」バージョンで応答します。この方法では、ディスク アクセスが最小限に抑えられ (コードが読み取られて解析されている)、コードがメモリ内で直接実行されるため、サーバーがリクエストに非常に速く応答できるようになるため、アプリケーションのパフォーマンスが大幅に向上します。
もちろん、キャッシュ モジュールは PHP ソース ファイルの変更も監視し、必要に応じてページを再キャッシュします。これにより、古い PHP コードによって生成されたままのページをユーザーが取得するのを防ぎます。キャッシュ モジュールはサーバーの負荷を大幅に軽減し、PHP アプリケーションの応答効率を向上させることができるため、負荷の高い Web サイトに非常に適しています。
これらのキャッシュ製品の選び方
Zend Cache は Zend Technologies の商用ソフトウェアであり、Zend Technologies は前述した PHP エンジンと無料のソフトウェアを提供するものです。ゼンドオプティマイザー社。 Zend Cache は確かに評判どおりです! 大規模な PHP ページの場合、最初の実行後に速度が向上し、サーバーで使用できるリソースが増加することがわかります。残念ながら、この製品は無料ではありませんが、場合によっては、それでも十分な価値がある可能性があります。
Afterburner Cache は、Bware Technologies の無料のキャッシュ モジュールです。この製品は現在ベータ版です。 Afterburner キャッシュは Zend Cache に似ていますが、(まだ) Zend Cache ほどパフォーマンスは向上しておらず、Zend Optimizer では動作しません。
APC は Alternative PHP Cache の略称で、Community Connect のもう 1 つの無料のキャッシュ モジュールです。すでに正式に使用できるほど安定した製品となっており、リクエストへの対応速度も大幅に向上するようだ。
コンテンツの圧縮
PHP アプリケーションのパフォーマンスを向上させるいくつかの方法について説明しました。閲覧者に Web サイトのパフォーマンスを向上させるもう 1 つの重要な要素を見てみましょう。遅い:ダウンロード速度。 PHP アプリケーションが内部イントラネットで実行されており、各クライアントが 100 MB/秒でサーバーに接続している場合、ダウンロード速度は問題になりません。ただし、サーバーが低速モデム ユーザーにもサービスを提供する必要がある場合は、コンテンツの圧縮を検討する価値があります。
ほとんどのブラウザは、IETF 標準に準拠した gzip によるコンテンツ圧縮をサポートしています。つまり、コンテンツを gzip 圧縮してブラウザに送信すると、ページが表示される前にデータが解凍され、プロセス全体がユーザーに対して完全に透過的になります。サーバー側のコンテンツ圧縮に関しては、さまざまな方法が利用可能です。
たとえば、Remote Communications の無料の Apache モジュール mod_gzip には、このタイプのコンテンツ エンコーディングをサポートするブラウザ向けに静的 Web コンテンツを圧縮する機能があります。静的 Web コンテンツの大部分では、mod_gzip が非常にうまく機能します。 mod_gzip は Apache に簡単にコンパイルでき、DSO としても使用できます。 Remote Communications によると、mod_gzip は mod_php、mod_perl などの動的コンテンツも圧縮できます。
何度も試しましたが、まだうまくいかないようです。 mod_gzip に関する多くのフォーラムや記事を読んだところ、この問題は mod_gzip の次のバージョン (おそらく 1.3.14.6f) で解決される予定のようです。それまでは、Web サイトの静的部分で mod_gzip を使用できます。
ただし、動的コンテンツを本当に圧縮する必要がある場合があるため、他の方法を見つける必要があります。 1 つの方法は、class.gzip_encode.php を使用することです。これは、PHP スクリプトの最初と最後でクラスの特定の関数を呼び出すことによって、ページのコンテンツを圧縮するために使用できる PHP クラスです。このソリューションを Web サイト レベルで実装する場合は、php.ini ファイルの auto_prepend および auto_append ディレクティブからこれらの関数を呼び出すことができます。
この方法は効果的ですが、高負荷の Web サイトでは間違いなくより多くのオーバーヘッドが発生します。このクラスの使用方法の詳細については、そのソース コードを参照してください。 ソースコードの説明は非常に完全で、著者はあなたが知る必要があるすべてを教えてくれます。
PHP 4.0.4 には新しい出力キャッシュ ハンドラー ob_gzhandler があり、前のクラスと似ていますが、使用方法が異なります。 ob_gzhandler を使用する場合は、php.ini に以下を追加します:
output_handler = ob_gzhandler;
このコード行により、PHP は出力キャッシュを有効にし、送信するすべてのものを圧縮します。何らかの理由で、このコード行を php.ini に追加したくない場合は、PHP ソース ファイルが置かれているディレクトリにある .htaccess ファイルを使用して、デフォルトのサーバー動作 (圧縮なし) を変更することもできます。次の構文:
php_value Output_handler ob_gzhandler
または、次のように PHP コードから呼び出します:
ob_start("ob_gzhandler");
のメソッド出力キャッシュ ハンドルの使用は確かに非常に効果的であり、サーバーに特別な負荷をもたらすことはありません。ただし、Netscape Communicator では圧縮グラフィックのサポートが不十分であるため、すべてのユーザーが IE ブラウザを使用していることを保証できない限り、圧縮 JPEG および GIF グラフィックを無効にする必要があることに注意してください。一般に、この圧縮は他のすべてのファイルに対して機能しますが、特に特別なプラグインやデータ ビューアを使用する場合は、ブラウザごとに個別にテストすることをお勧めします。
前に紹介したさまざまなテクニックを使用すると、Web サイトのパフォーマンスを大幅に向上させることができます。ただし、
PHP がパフォーマンスのボトルネックになる場合とそうでない場合があることに注意してください。データベースなど、アプリケーションのパフォーマンスに関連するあらゆる要素を注意深く観察してください。
この記事のテクノロジーを使用するだけでは、一定の制限内でのみ Web サーバーのパフォーマンスを向上させることができます。したがって、PHP とそのキャッシュを非難する前に、サーバーをアップグレードする必要があるかどうか、また負荷分散テクノロジを導入できるかどうかを検討したほうがよいでしょう (後者には多額の投資が必要です)。
コンテンツ圧縮の力を過小評価しないでください。 100 MB/秒の LAN 接続では Web アプリケーションが非常に高速に応答することがわかりますが、モデム接続を使用しているユーザーは、100 Kb の HTML ページが大きすぎると不満を言うだけです。
この記事の PHP 入門がお役に立てば幸いです。
[関連チュートリアルの推奨事項]
3.