ホームページ >バックエンド開発 >PHPチュートリアル >PHPアプリケーション高速化の概要_PHPチュートリアル
PHP の最大の利点の 1 つは、明らかにその速度です。一般に、PHP は常に Web コンテンツの動的な生成をサポートするのに十分な速度を備えており、多くの場合、PHP よりも高速な方法を見つけることさえできません。ただし、大量のトラフィック、高負荷のアプリケーション、限られた帯域幅、およびパフォーマンスのボトルネックを生み出すその他のさまざまな要因に対処する必要がある場合、Web サイトの動作を改善するために何かできることはないかと自問するかもしれません。おそらく、非常に質素な無料モジュールを追加する限り、PHP アプリケーションのパフォーマンスと Web サーバーの応答速度が大幅に向上するでしょう。この記事では、PHP アプリケーションのパフォーマンスをさらに向上させ、ユーザーにより良いブラウジング エクスペリエンスを提供する方法について説明します。この記事では、PHP アプリケーションのパフォーマンスを向上させるためのさまざまなテクノロジーをコードの最適化、キャッシュ、コンテンツの圧縮の 3 つの側面から説明し、さまざまな分野でよく知られている製品を紹介します。
コードの最適化
まず、コードの最適化について見てみましょう。ここでのコードの最適化は、コードをより美しく書くことを意味するものではないことに注意してください。これはおそらくすでに知られており、これ以上議論する必要はありません。また、速度の問題をすでに検討している場合は、すでに検討している可能性があります。 PHP ソース コードに変更を加え、いくつかの最適化を行いました。ただし、Zend Optimizer などの一部のツールは、これらの複雑なタスクを自動的に完了するのに役立ちます。 Zend Optimizer は Zend Technologies から無料で入手できますが、ライセンス契約に同意する必要があり、GPL に基づいて配布されていないことに注意してください。 Zend Optimizer は、Zend Engine のランタイム コンパイルによって生成された中間コードを取得し、中間コードの実行効率が向上するように最適化します。
Zend Optimizer のインストール方法は非常に簡単で、使用しているプラットフォーム用に提供されているプリコンパイル済みバージョンをダウンロードし、次の 2 行のコードを php.ini に追加して、Web サーバーを再起動するだけです。 .optimization_level=15
zend_extension="/path/to/ZendOptimizer.so"zend_loader.enable=Off
ここでの追加の 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 Optimizer を提供する会社です。 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 ページが大きすぎると不満を言うだけです。