PHP は、新しいリクエストを処理するたびに必要なスクリプトを読み取りますか?
単一のリクエストを処理するために PHP が実行するディスク IO 操作について説明できますか
PHPがApacheモジュールまたはPHP-fpmの場合、何かが変わりますか
PHP は、新しいリクエストを処理するたびに必要なスクリプトを読み取りますか?
単一のリクエストを処理するために PHP が実行するディスク IO 操作について説明できますか
PHPがApacheモジュールまたはPHP-fpmの場合、何かが変わりますか
はい。
次のように想像してください。
script_a.php
<?php
$foo = 'bar';
$bar = 'foo';
?>
script_b.php
<?php
require_once 'script_a.php';
echo $foo . ' ' . $bar;
?>
実行時に、script_b.phpには実際には以下が含まれます。
<?php
$foo = 'bar';
$bar = 'foo';
echo $foo . ' ' . $bar;
?>
そのため、新しいリクエストが処理されるたびにスクリプト (またはスクリプト) を読み取ります。これが、中負荷から高負荷のサーバーがAPCやeAcceleratorなどのオペコード キャッシュを使用する理由です。
これらが行うことは、スクリプト全体 (require/includes が処理されたもの) をメモリにキャッシュすることで、次のリクエストをバイトコード化するために処理する必要はなく、実行するだけです。これは、ディスク I/O がなく、Zend エンジンがスクリプトをバイトコードに再度変換する必要がないため、パフォーマンスが大幅に向上する可能性があります。
編集:
PHPがApacheモジュールまたはPHP-fpmの場合、何かが変わりますか
いいえ、少なくとも PHP が include/require を処理する方法ではありません。
お役に立てれば。
PHP スクリプトが実行されると、ハードドライブから読み込まれます。最初に実行されたスクリプトに含まれるスクリプトについても同様です。ただし、パフォーマンスが心配な場合に使用できる特定のキャッシュ手法があります。
こちらをご覧ください: http://php.net/manual/en/book.apc.php
PHP は、リクエストごとにファイルを読み取ります。オペコードをメモリに保持するXCacheなどのオペコードキャッシャーを使用できるため、PHPが実際にファイルを読み取る必要はありません(変更された時間をチェックするだけです)。FPM と apache モジュールは何にも影響しません