0

PHP ファイル内の一連の定数の正確な読み込み時間を測定したいと考えています。私は4つの方法を選択しました:

  • キーと値のペアの配列を使用する (php ファイル内のデータの配列を返す)
  • 定数を含むクラスを使用する
  • 定義
  • json (json_encoded 値をファイルに書き込み、file_get_contents および json_decode を使用してそれらをロードします)

最初に、これらのメソッドで 4 つの異なるファイルを作成し、次に 5000 のランダムな名前と値のペア (すべて同じ値) で埋めました。

私はそれらを PHP で読み込もうとし、microtime関数を使用して読み込み時間を測定しましたが、結果は少し奇妙に思えます! これは私のtest.phpファイルです:

// array
$time['array']['start'] = microtime(true);
$config_a = include('conf_array.php');
$time['array']['end'] = microtime(true);
// class
$time['class']['start'] = microtime(true);
include('conf_class.php');
$config_c = new Config();
$time['class']['end'] = microtime(true);
// define
$time['defin']['start'] = microtime(true);
include('conf_define.php');
$time['defin']['end'] = microtime(true);
// json
$time['json']['start'] = microtime(true);
$config_j = json_decode(file_get_contents('conf_json.json'));
$time['json']['end'] = microtime(true);

foreach ($time as $name => $item) {
    echo $name . ": " . (($item['end'] - $item['start']) * 1000) . " units.";
}

新しく生成された一連のファイルをロードするtest.phpと、次の結果が得られます。

Array:  7.9629421234131 units.
Class:  6.5279006958008 units.
Defin:  19.877910614014 units.
Json:   4.4741630554199 units.

しかし、更新ボタン (F5) を押すと、結果が変わります! ページを更新した後の同じサンプルの結果を次に示します。

Array:  1.7659664154053 units.
Class:  2.467155456543  units.
Defin:  6.4060688018799 units.
Json:   4.9409866333008 units.

そして、それ以上順番は変わりません。複数回ロードすると、php ファイル (json を除くすべて) のロードが速くなるようです。Apache を (PHP と共に) 再起動すると、同じことが起こります。

どうしてこうなった!?と思いました。ある種のキャッシングと関係がありますか?

4

1 に答える 1

1

Apache 自体が基本的なキャッシングを行うかどうかはわかりませんが、意図的にそうすべきではないと思います。この動作を引き起こすいくつかのモジュールがインストールされている可能性があります。

  1. mod_cache
  2. mod_file_cache
  3. コンパイルされた PHP をメモリにキャッシュするAPC 。(JSON txt ファイルが影響を受けない理由を説明できます)

たぶん、あなたはこれらのいずれかを持っているか、この効果の原因である他のものを持っているかもしれません.

于 2013-10-24T15:19:01.950 に答える