8

PHP は、新しいリクエストを処理するたびに必要なスクリプトを読み取りますか?

単一のリクエストを処理するために PHP が実行するディスク IO 操作について説明できますか

PHPがApacheモジュールまたはPHP-fpmの場合、何かが変わりますか

4

3 に答える 3

9

はい。

次のように想像してください。

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;
?>

そのため、新しいリクエストが処理されるたびにスクリプト (またはスクリプト) を読み取ります。これが、中負荷から高負荷のサーバーがAPCeAcceleratorなどのオペコード キャッシュを使用する理由です。

これらが行うことは、スクリプト全体 (require/includes が処理されたもの) をメモリにキャッシュすることで、次のリクエストをバイトコード化するために処理する必要はなく、実行するだけです。これは、ディスク I/O がなく、Zend エンジンがスクリプトをバイトコードに再度変換する必要がないため、パフォーマンスが大幅に向上する可能性があります。

編集:

PHPがApacheモジュールまたはPHP-fpmの場合、何かが変わりますか

いいえ、少なくとも PHP が include/require を処理する方法ではありません。

お役に立てれば。

于 2013-01-12T10:07:19.087 に答える
1

PHP スクリプトが実行されると、ハードドライブから読み込まれます。最初に実行されたスクリプトに含まれるスクリプトについても同様です。ただし、パフォーマンスが心配な場合に使用できる特定のキャッシュ手法があります。

こちらをご覧ください: http://php.net/manual/en/book.apc.php

于 2013-01-12T10:03:38.710 に答える
0

PHP は、リクエストごとにファイルを読み取ります。オペコードをメモリに保持するXCacheなどのオペコードキャッシャーを使用できるため、PHPが実際にファイルを読み取る必要はありません(変更された時間をチェックするだけです)。FPM と apache モジュールは何にも影響しません

于 2013-01-12T10:04:49.243 に答える