将简单循环的迭代次数增加1会显着增加执行时间

时间:2012-06-05 19:52:30

标签: php apache microtime

我需要一些帮助来弄清楚网络服务器有关执行时间的情况。当服务器返回的字符数大于~41000时,我注意到了一个问题 - 大约40KB。

所以我做了一个剧本:

<?php
    $php_start_time = MICROTIME(TRUE);
    echo $_GET['i'].':';
    for($i=0;$i<=$_GET['i'];$i++) { echo 'a'; }
    echo '<br>runtime: '.(MICROTIME(TRUE) - $php_start_time);
?>

我尝试了,每次超过10次,多个浏览器:

当$ _GET ['i'] = 40952时,我绕过 0.013 ... ms

当$ _GET ['i'] = 40953时,我绕过 0.679 ... ms

只有一个char的差异为0.666?

我在尝试从不同位置(在线代理)获取页面结果时看到运行时差异很大。

所以我想它与距离有关。我在欧盟,服务器在美国。

在找到解决此问题的方法之前,脚本位于:http://selfreveal.com/speed_test_1.php?i=40953

也是phpinfo():http://selfreveal.com/phpinfo.php

3 个答案:

答案 0 :(得分:0)

我的第一个猜测是你遇到内存限制并且垃圾收集器正在进入。尝试增加内存限制:

ini_set('memory_limit'. '128M');

答案 1 :(得分:0)

时间并不总是相同的,您的计算机/服务器可能正在处理另一个进程,这可能会减慢您当前正在运行的其他进程。

尝试运行100x或1000x然后获得avarage。你会发现差异几乎消失了。

答案 2 :(得分:0)

您可以尝试在flush();之后添加echo 'a';并重新测试吗?您也可以尝试使用ob_start()ob_flush()来确保它是不是一些内部缓冲区(依赖于操作系统)或任何东西