6

質問は非常に単純です。ディスクに触れることになると、これら2つの例は同じですか、それともシナリオ#2はディスクに2回触れますか?

シナリオ#1

include '/path/to/file.php';

シナリオ#2

if (file_exists('/path/to/file.php'))
    include '/path/to/file.php';

シナリオ#1がディスクに一度触れたことを知っています。今、私が理解しているようにfile_exists()、パスとファイルが存在するかどうかをキャッシュします。そのキャッシュをクリアするには、を呼び出す必要がありますclearstatcache()

しかしinclude、et aliiもそのキャッシュを使用していますか?それともそれは排他的file_exists()ですか?

4

2 に答える 2

5

注意すべき点が1つだけあります。それincludeは、インクルードパスを使用することです。file_existsそうではありません。それとは別に、あなたは明らかに解決策ではなく問題を探しています(これは間違ってはいけません、ただ言って、私の答えはあなたが探しているものを満たさないかもしれません、断片だけをカバーしています)。

于 2012-12-23T01:43:05.887 に答える
3

これらの例は両方とも、ディスクに2回アクセスします。つまり、ディレクトリを読み取ってからファイルを読み取ります。最初の例では、これは両方とも1つのコマンドの間に発生し、2番目のコマンドはそれらを分割します。お使いのOSには少なくともこれだけの長さのHDキャッシュが含まれている必要があるため、include()がディレクトリを再度読み取る可能性はほとんどありません。

しかし、あなたは明らかに何かを過度に最適化しようとしています。スクリプトでこれを100回以上実行しない限り、2つのオプションの間にパフォーマンスの違いはありません。

于 2012-12-23T01:41:23.567 に答える