在对个人宠物项目进行一些分析之后,我正在玩一些愚蠢的微观优化。它在很大程度上是一个实验,所以我正在调整的东西实际上并不需要调整。尽管如此,这仍然是一项有趣的练习。
无论如何,我在OS X上通过Macports安装PHP 5.3和在apt上安装Ubuntu时遇到了奇怪的性能差异。
以下代码似乎显示了OS X上两个不同版本之间的巨大速度差异,但在Ubuntu上只有极小的速度差异。
$x = array(9);
// As per BarsMonster's comment, this ensures it runs for more
// than a second in order to avoid possible kernel scheduler differences
$count = 10000000;
$s = microtime(true);
for ($i=0;$i<$count;$i++) {
$q = is_string($x);
}
var_dump(microtime(true)-$s);
$s = microtime(true);
for ($i=0;$i<$count;$i++) {
// This is obviously only useful if you'll never need a string
// with 'Array' in it here
$q = (string)$x!='Array';
}
var_dump(microtime(true)-$s);
在OS X上运行时的输出:
float(17.977133989334)
float(4.2555270195007)
在Ubuntu上运行时的输出:
float(5.2112979888916)
float(3.4337821006775)
看到被黑客攻击的版本的数字非常相似并不令我感到惊讶,但是is_string方法却截然不同。
我可以将此归因于什么?如果从简单类型测试功能的安装到安装的性能变化很大,我如何使用与我的目标部署平台不匹配的操作系统信任分析结果?
在Ubuntu和OS X上打开或关闭APC的时间没有区别。
答案 0 :(得分:1)
Ubuntu安装与OS X安装在同一台PC上?
这可能与zts有关。
尝试在两个系统上使用相同的标志自行配置。 默认情况下,在ubuntu上可能启用了选项,这些选项在端口中默认禁用。
我不确切知道哪个,但你的phpinfo()会告诉我。如果没有(也许phpinfo没有显示,也许它只是显示一个空白页面;那么你的系统之一可能正在编译Susoshin补丁(或其他)。
答案 1 :(得分:0)
请测试1秒钟的最小值,在0.1秒的时间范围内内核调度程序差异(以及其他几十个原因)可能会影响您的结果。
检查您是否意外安装了任何加速器(APC,eAccelerator,e.t.c) - 只需比较两个实例中的phpinfo(),您就会看到。