PHP がほとんどインタープリター言語であることは知っています。PHP インタープリター (Windows では php.exe、Linux では php ファイル) は、スクリプトを実行するたびに解釈を行いますか?それとも、ソースを変更した場合にのみ解釈しますか? 別の言い方をすれば、PHP インタープリターは解釈されたスクリプトをキャッシュしますか?
3 に答える
はい、PHP は毎回解釈を行うため、パフォーマンスが低下します。ただし、APC (Alternative PHP Cache: http://php.net/apc ) をインストールして構成している場合は、バイトコード全体がメモリに保持され、変更が発生したときに再構築されます。
これは本質的に、リクエストが到着するたびに起こることです:
- PHPはファイルを読み取ります
- PHP は、ファイルを処理可能な言語、いわゆるオペコードにコンパイルします。
- PHP はオペコードを実行します
多くの人がすでに指摘しているように、ファイルをオペコードにコンパイルするにはいくらかのオーバーヘッドがあり、PHP にはデフォルトでキャッシュがないため、ファイルが変更されていなくても、リクエストが到着するたびに「コンパイル」プロセスが実行されます。
そのオーバーヘッドを回避するために opcode キャッシュを生成できるオプションのモジュールがいくつかあります。その中で一般的に最も推奨されるのは APC です。これは、PHP 6 でデフォルトで出荷されるためです。
はい。
インタープリター言語であるため、パフォーマンスが低下します。ただし、それをコンパイルして使用する方向でいくつかの研究があります。
PHP Acceleratorを見てください。
ほとんどの PHP アクセラレータは、PHP スクリプトのコンパイル済みバイトコードをキャッシュして、各リクエストでソース コードを解析およびコンパイルするオーバーヘッドを回避することによって機能します (一部またはほとんどが実行されない可能性があります)。パフォーマンスをさらに向上させるために、キャッシュされたコードは共有メモリに格納され、そこから直接実行されるため、実行時の遅いディスク読み取りとメモリ コピーの量が最小限に抑えられます。