为什么php5.3.8比5.3.7慢10倍?

时间:2011-09-01 14:52:07

标签: php

我刚刚使用dotdeb.org的apt源升级到php 5.3.8。

php性能的测试结果非常糟糕。

我在安装php5.3.8之前和之后用这个脚本测试。似乎运行相同的代码将花费10倍于php5.3.8的时间而不是php5.3.7。

测试php脚本:

<?php
//test float
function test_float() {
    $t = pi();
    $timeStart = gettimeofday();

    for($i = 0; $i < 3000000; $i++) {
        sqrt($t);
    }

    $timeEnd = gettimeofday();
    $time = ($timeEnd["usec"]-$timeStart["usec"])/1000000+$timeEnd["sec"]-$timeStart["sec"];
    $time = round($time, 3)."s";
    return $time;
}

echo "php version:" , phpversion(), "\n";
echo "call sqrt()  3,000,000 times will cost ", test_float(), "\n";

?>

测试结果:

php version:5.3.3-7+squeeze3
call sqrt()  3,000,000 times will cost 1.369s
php version:5.3.3-7+squeeze3
call sqrt()  3,000,000 times will cost 1.095s
php version:5.3.3-7+squeeze3
call sqrt()  3,000,000 times will cost 1.072s
php version:5.3.8-1~dotdeb.2
call sqrt()  3,000,000 times will cost 10.644s
php version:5.3.8-1~dotdeb.2
call sqrt()  3,000,000 times will cost 10.567s
php version:5.3.8-1~dotdeb.2
call sqrt()  3,000,000 times will cost 10.343s

3 个答案:

答案 0 :(得分:5)

5.3.8版本可能已使用调试选项编译,或者没有编译器优化。

或者您可能在PHP 5.3.7中添加了一些缓慢扩展,但在PHP 5.3.7中未启用,例如 xdebug suhosin

我打赌第二种解决方案。

  • 比较php -m的输出。 (已加载模块的列表。)
  • 尝试使用php -n运行基准测试(运行PHP而不加载任何ini设置文件)

答案 1 :(得分:2)

无论如何,因为5.3.7中有critical security bug。函数crypt仅返回salt。因此,无论速度更慢还是更快,都不建议使用5.3.7

答案 2 :(得分:0)

基准测试和性能分析应始终在实际代码上进行,您正在尝试优化性能

事实上,也许只有sqrt()函数更慢,并且所有函数的99%都快了3倍。我认为问题来自你的基准。

另外,请检查你是否在同一台机器上,同一台机器上运行php,同样的php.ini等。