PHPを実行するモードとは!
PHPをサーバ上で動作させるモードには、いくつかの種類があります。PHP動作モードには、種類があって
PHPの動作によって、大きくパフォーマンスが異なることになります。
通常、「CGI/PHP」などのプログラムの実行時には、
「プロセスの起動/終了」「プロセスの実行」といった処理がサーバー内で発生します。
ですので、「Wordpress」など、PHPで動かす「CMS」といったWEBサイトは、「プロセスの起動/終了」などの実行の処理が速いのが有効になり、表示速度にも影響しますね!
CGI版PHPとは
実行ファイル形式として、長きにわたって「CGI版」が使われてきました。
簡潔に言うと、サーバー上で、プログラムを実行する機能で使われています。
「Apache」のプロセス内で処理せず、CGI プログラムを別途起動して処理する方法になる
- CGI版PHPのメリット
「CGI版PHP」を動かす、それぞれのユーザー権限でPHPが実行されます。
そのため、他ユーザーに干渉してしまうといった危険がありません。CGI版は、WEBサーバ(Apache)とは別のプロセスで実行される仕組みで
1っのサーバーを、複数人で利用するにあたって、個別に利用できるメリットから多くのレンタルサーバーでは「CGI版 PHP」が主流になっている - CGI版PHPのデメリット
Webサーバーとは、別のプロセスとして動かすぶん、実行するたびにメモリのロードが必要となり、処理作度が遅くなってしまう。
リクエスト毎に1つの新しいプロセスを、毎回毎回の生成を行うことによって非常に非効率になり、動作が遅くなるのがデメリットになる!
モジュール版PHPとは
モジュール版PHPは、WEBサーバ(Apache)とは別のプロセスで実行する「CGI版PHP」とは逆で、Webサーバーのプロセスの中で、実行する方法になります。
要するに、「Apache」のモジュールによる機能追加によって拡張され、Webサーバ(Apache)で、動的処理を一括処理ができることになる。
- モジュール版PHPのメリット
直接、処理(実行)されることで、処理能力が格段と上がり高速処理できる!
Webサーバーの機能(モジュール拡張)の1つとして、Webサーバーが立ち上がる時に一度だけPHPを読み込み、毎回読み込む必要がないので速度が早くなります。
- モジュール版PHPのデメリット
PHPを使っていないサイトでも、apacheプロセス上にPHPモジュールを保持している分、メモリ効率が悪いです。
共用のレンタルサーバーを利用する上で、モジュール版PHP は、Apache の権限で、個別の領域の設定ができず、1っのサーバで作業を行うため、セキュリティ等の関係で共有サーバに向かない!
ですが、近年、独自の開発により、安全に権限分離できる環境を構築されて、共用のレンタルサーバーでも、「モジュール版PHP」を提供できるようになっている。
FastCGIとは
FastCGIは、CGIの問題を解決するためにCGI版PHPをベースとして開発、
モジュール版PHPと同等の処理速度を実現するための実行方式になります。
「CGI版PHP」の問題点として、リクエストがある度に、プログラムの「起動/終了」の処理が発生するため動作が遅くなる!例えば、100回のリクエストがあると、100回の起動/終了の処理が発生することになる!
- FastCGIのメリット
一度起動したら、一定期間の待機させることによって、プログラムの開始と終了にかかる手間を減らすことで、処理の高速化とWebサーバの負荷を軽減することができる仕組み
メモリ上に、保持されたプロセスを再利用することで、起動と終了時の遅延をなくすことができます。
- FastCGIのデメリット
PHPを使っていないサイトでも、apacheプロセス上にPHPモジュールを保持している分、メモリ効率が悪いです。
一定時間プロセスを維持することが大きなメリットですが、アクセスが少ない場合は不得意となり、次のアクセスがあった時には、すでにプロセスが破棄されている場合がある。
プロセスを維持が破棄されると、「起動・処理・終了」と、プロセスを踏むことになるので、「FastCGI」のメリットを生かせていないことになります。
LSAPIとは
LSAPI は Webサーバ(LiteSpeed)で開発した、高度に最適化されたPHP動作モードです。
「FastCGI」と似た動作をするのですが、それよりもっと効率的です。
- LSAPIのメリット
「LSAPI」の最大の特徴はキャッシュが強力になる!
実行結果を、常にキャッシュしてしまうので、「FastCGI」よりも圧倒的に高速処理が可能といわれています。
- LSAPIのデメリット
キャッシュが強力すぎる
例えば、アクセスカウンターを設置した様に、リアルタイムで更新が必要なコンテンツでは不向きな仕様になってしまいます。
FastCGI と モジュール版PHP の違い
「FastCGI」 と 「モジュール版PHP」のパフォーマンスは、ほぼ同じといわれています。
ただ、処理のプロセスとして、「FastCGI」の場合は、アプリケーションサーバーで処理を行うのに対して、モジュール版PHPは、Webサーバで一括処理します。
ですので、モジュール版PHPは、常に保持されている状態で、速度が一定しているのに対して、「FastCGI」は、一定時間が過ぎると保持状態が破棄される場合があるので、アクセスが途絶えると遅くなってしまう場合があり、デメリットでもあります。
CGI版 | モジュール版 | FastCGI | LSAPI | |
単発アクセスの処理 | 遅い | 高速 | 遅い | 遅い |
連続アクセスの処理 | 遅い | 高速 | 高速 | 超高速 |
キャッシュ | 低 | 低 | 低 | 高 |