1. コードの最適化
コードの最適化とは、単にクリーンで明確なコードを記述するだけではなく、コードをある程度単純化することも意味します。 Zend Optimizer を使用すると、これらの面倒なタスクを自動的に完了できます。 Zend Optimizer は、Zend Technologies の Web サイト http://www.zend.com/ から無料で入手できますが、GPL に基づいて配布されていないため、ライセンス契約に同意する必要があります。その原理はシンプルで、Zend エンジンによって生成された中間コードを検出し、それを最適化することでより高い実行速度を実現します。
Zend Optimizer を使用すると、複雑な PHP ソース プログラムの実行効率が即座に大幅に向上します。欠点は、最適化されたコードの可読性が低下し、コードの修正が困難になることです。
Zend Optimizer のインストール方法は非常に簡単で、ユーザーが使用するプラットフォームに応じて適切なプリコンパイル済みバージョンをダウンロードし、次の 2 行のコードを php.ini ファイルに追加して、Web サーバーを再起動するだけです:
zend_optimizer。 optimization_level=15
zend_extension=″/path/to/ZendOptimizer.so″
zend_loader.enable=Off
zend_loader を無効にすると最適化が速くなるため、追加の 3 行目のコードはオプションです。 zend_loader は、Zend Encoder Runtime が使用されていない場合にのみ無効にできることに注意してください。
2. キャッシュを使用する
PHP プログラムのサイズが大きい場合、速度を向上させる方法はキャッシュを使用することです。 Zend Cache、APC、Afterburner Cache など、利用可能なキャッシュ ソリューションが多数あります。
上記はすべて「キャッシュモジュール」です。初めて PHP ファイルが呼び出されるとき、キャッシュ モジュールは PHP ソース コードから中間コードを生成し、これらの中間コードを Web サーバーのメモリに保存します。これらのファイルを後で呼び出すと、メモリ内の「コンパイルされた」コードを直接使用できます。この方法では、ディスク アクセスが最小限に抑えられ (コードが読み取られて解析されている)、コードがメモリ内で直接実行されるため、サーバーがリクエストに非常に速く応答できるようになるため、アプリケーションのパフォーマンスが大幅に向上します。
もちろん、キャッシュ モジュールは PHP ソース ファイルの変更も監視し、必要に応じてページを再キャッシュして、古い PHP コードによって生成されたページをユーザーが取得するのを防ぎます。キャッシュ モジュールはサーバーの負荷を大幅に軽減し、PHP アプリケーションの応答効率を向上させることができるため、負荷の高い Web サイトに非常に適しています。
Zend Cache は、Zend Technologies によって開発された商用ソフトウェアです。最初の実行後、PHP ページの実行速度はすぐに大幅に向上し、サーバーの空きリソースが増加します。欠点は無料ではないことですが、価格/パフォーマンスの比率は依然として非常に高いです。
Afterburner Cache は、Bware Technologies によって開発された無料のキャッシュ モジュールです。機能は基本的には Zend Cache と同じですが、パフォーマンスの向上という点では Zend Cache には及びません。
APC (Alternative PHP Cache) は、Community Connect によって開発されたもう 1 つの無料のキャッシュ モジュールです。現在のバージョンは 2.0.4 で、http://pecl.php.net/package/APC から入手できます。製品アプリケーションの場合、そのパフォーマンスは非常に安定しており、リクエストへの応答速度も大幅に向上します。
3. Web ページのコンテンツを圧縮する
サイトのアクセス速度に影響を与えるもう 1 つの重要な要素が、ダウンロード速度です。解決策は、Web コンテンツを圧縮することです。プレーン テキスト コンテンツの場合、HTTP 圧縮テクノロジを使用して元のサイズの 40% 未満に圧縮できるため、データ送信を 60% 以上節約できます。 Web サーバーは圧縮により CPU 使用率をわずかに増加させますが、送信に使用されるネットワーク IO を大幅に節約できます。
IETF 仕様によれば、ほとんどのブラウザはコンテンツ圧縮に gzip 圧縮アルゴリズムの使用をサポートしています。つまり、gzip を使用して最初に Web ページのコンテンツを圧縮し、それをクライアントのブラウザーに送信すると、ブラウザーはデータを受信するときに自動的に解凍して、ページを表示します。このプロセスはユーザーに対して完全に透過的です。同様に、Web ページのコンテンツを圧縮するためのさまざまな方法があります。
Mod_gzip はオープンソースの標準 Apache モジュールであり、インターネット コンテンツ アクセラレーション モジュールとも呼ばれます。 Apache でコンパイルすることも、DSO として使用することもできます。通常のブラウジングプロセスと比較して、トラフィックを約 40% 節約できます。 Mod_gzip は、HTML や XML などの静的コンテンツを圧縮するだけでなく、SQL、Java、WML、VRML などの動的に生成されたコンテンツをサーバー側でリアルタイムに圧縮して送信することもでき、その圧縮効率は一般に驚くべきものです。 60%~85%。
動的 Web ページのコンテンツを圧縮するには、class.gzip を使用して .php ファイルをエンコードすることもできます。class.gzip は、PHP スクリプトの最初と最後でいくつかの関数を呼び出すことで、Web ページのコンテンツを圧縮します。サイト全体でこのような圧縮が必要な場合は、php.ini ファイルの auto_prepend および auto_append でこれらの関数を呼び出すことができますが、ある程度のシステム オーバーヘッドが発生します。
PHP4.0.4 では、新しい出力バッファー処理メソッド ob_gzhandler が導入されています。その機能は class.gzip とまったく同じです。構文は次のとおりです。出力ハンドラー = ob_gzhandler
;これにより、PHP の出力バッファリング機能が有効になり、送信前にコンテンツが圧縮されます。ここで設定したくない場合は、必要に応じてデフォルト設定 (圧縮なし) を変更してください。圧縮する必要がある PHP ソース プログラム ディレクトリ内の .htaccess ファイルを変更するだけです。構文は次のとおりです。 ob_gzhandler
または PHP コードで直接呼び出します:
ob_start("ob_gzhandler");
出力バッファリングの効果は実に理想的であり、サーバーに追加のシステム オーバーヘッドをもたらしません。注意すべき点の 1 つは、Netscape Communicator は画像圧縮をサポートしていないことです。したがって、訪問者が Internet Explorer を使用していることがわかっていない限り、jpeg および gif 画像の圧縮を無効にする必要があります。
4 その他のヒント
プログラミングするとき、PHP の実行速度を上げるためのいくつかのヒントを使用することもできます:
(1) i=i+1 の代わりに i+=1 を使用します。これは c の習慣に沿っています。 /c++ は比較的効率的です。
(2) 可能な限りPHPの内部関数を使用する。
(3) シングルクォート文字列が使用できる場合は、シングルクォート文字列を使用するようにしてください。一重引用符で囲まれた文字列は、二重引用符で囲まれた文字列よりも効率的です。
(4) 配列を走査するには while の代わりに foreach を使用します。foreach の効率は while ループよりも大幅に高く、リセット関数を呼び出す必要はありません。