for i in /home/fbarnes/phpperf/hdr{00..99}.php; do
echo "<?php
// $i" > $i
cat helper.php >> $i;
done
通过这种方式,我可以很容易地在包含头文件时在使用 need _ once 和 request 之间进行切换。然后我创建了一个 app.php 来加载100个文件。这看起来像:
<?php
// Load all of the php hdrs that were created previously
for($i=0; $i < 100; $i++)
{
require_once "/home/fbarnes/phpperf/hdr$i.php";
}
// Read the /proc file system to get some simple stats
$pid = getmypid();
$fp = fopen("/proc/$pid/stat", "r");
$line = fread($fp, 2048);
$array = split(" ", $line);
// Write out the statistics; on RedHat 4.5 with kernel 2.6.9
// 14 is user jiffies; 15 is system jiffies
$cntr = 0;
foreach($array as $elem)
{
$cntr++;
echo "stat[$cntr]: $elem\n";
}
fclose($fp);
?>
我没有发现在运行这个命令时,使用 need 和 need _ once 有什么不同。事实上,我最初的测试似乎暗示了 need _ once 稍微快一点,但我不一定相信这一点。我用10000个输入文件重复了这个实验。在这里我确实看到了一致的差异。我多次运行这个测试,结果很接近,但是使用 need _ once 使用平均30.8个用户 jiffies 和72.6个系统 jiffies; 使用 need 使用平均39.4个用户 jiffies 和72.0个系统 jiffies。因此,看起来使用 need _ once 的负载会稍微低一些。然而,墙上的时钟时间略有增加。10,000个 need _ once 调用平均需要10.15秒才能完成,10,000个 request 调用平均需要9.84秒。
您应该考虑这样一个问题: 作为一般规则,include 在 PHP 中是昂贵的,因为每次解释器命中一个 include 时,它都必须切换回解析模式,生成操作码,然后跳回。如果你有100 + 包含,这肯定会有一个性能影响。为什么使用或不使用 need _ once 是一个如此重要的问题,因为它使操作码缓存的生活变得困难。对此的解释可以在这里找到,但归结起来就是:
require_once("includes/usergroups.php");
require_once("includes/permissions.php");
require_once("includes/revisions.php");
class User{
// User functions
}