常数加载基准

时间:2013-10-24 13:40:27

标签: php json

我想测量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),也会发生同样的事情。

我想知道为什么会这样?!它与某种缓存有关吗?

1 个答案:

答案 0 :(得分:1)

我不知道Apache本身是否会进行基本缓存,但我认为它不应该是设计的。可能会安装几个导致此行为的模块:

  1. mod_cache
  2. mod_file_cache
  3. APC将已编译的PHP缓存在内存中。 (并且可以解释为什么JSON txt文件不受影响)
  4. 也许你有这些,或者其他可能导致这种影响的原因。