1

PHP がほとんどインタープリター言語であることは知っています。PHP インタープリター (Windows では php.exe、Linux では php ファイル) は、スクリプトを実行するたびに解釈を行いますか?それとも、ソースを変更した場合にのみ解釈しますか? 別の言い方をすれば、PHP インタープリターは解釈されたスクリプトをキャッシュしますか?

4

3 に答える 3

3

はい、PHP は毎回解釈を行うため、パフォーマンスが低下します。ただし、APC (Alternative PHP Cache: http://php.net/apc ) をインストールして構成している場合は、バイトコード全体がメモリに保持され、変更が発生したときに再構築されます。

于 2012-06-09T17:56:40.187 に答える
2

これは本質的に、リクエストが到着するたびに起こることです:

  • PHPはファイルを読み取ります
  • PHP は、ファイルを処理可能な言語、いわゆるオペコードにコンパイルします。
  • PHP はオペコードを実行します

多くの人がすでに指摘しているように、ファイルをオペコードにコンパイルするにはいくらかのオーバーヘッドがあり、PHP にはデフォルトでキャッシュがないため、ファイルが変更されていなくても、リクエストが到着するたびに「コンパイル」プロセスが実行されます。

そのオーバーヘッドを回避するために opcode キャッシュを生成できるオプションのモジュールがいくつかあります。その中で一般的に最も推奨されるのは APC です。これは、PHP 6 でデフォルトで出荷されるためです。

于 2012-06-09T18:05:33.633 に答える
1

はい。

インタープリター言語であるため、パフォーマンスが低下します。ただし、それをコンパイルして使用する方向でいくつかの研究があります。

PHP Acceleratorを見てください。

ほとんどの PHP アクセラレータは、PHP スクリプトのコンパイル済みバイトコードをキャッシュして、各リクエストでソース コードを解析およびコンパイルするオーバーヘッドを回避することによって機能します (一部またはほとんどが実行されない可能性があります)。パフォーマンスをさらに向上させるために、キャッシュされたコードは共有メモリに格納され、そこから直接実行されるため、実行時の遅いディスク読み取りとメモリ コピーの量が最小限に抑えられます。

于 2012-06-09T17:59:49.753 に答える