如何测量用PHP编写的代码的速度?[已关闭]

2022-08-30 07:08:22

我怎么能说哪一类人(它们都做同样的工作)执行得更快?有没有软件来衡量这一点?


答案 1

(至少)有两种解决方案:

相当“天真”的是使用microtime(true)在一部分代码之前和之后,获取执行期间经过了多少时间;其他答案也这么说,并且已经给出了例子,所以我不会再说太多了。

如果您想对几个说明进行基准测试,这是一个不错的解决方案 ;例如,比较两种类型的函数 - 最好完成数千次,以确保任何“扰动元素”都被平均。

像这样的东西,所以,如果你想知道序列化一个数组需要多长时间:

$before = microtime(true);

for ($i=0 ; $i<100000 ; $i++) {
    serialize($list);
}

$after = microtime(true);
echo ($after-$before)/$i . " sec/serialize\n";

不完美,但很有用,并且不需要花费太多时间来设置。



另一个解决方案,如果你想确定哪个函数在整个脚本中花费大量时间,效果很好,是使用:

  • Xdebug 扩展,用于为脚本生成分析数据
  • 读取分析数据并为您提供可读内容的软件。我知道其中三个:
    • 韦格林 ;网页界面 ;应该在任何Apache + PHP服务器上工作
    • WinCacheGrind ;仅在窗户上
    • 卡奇格林德 ;可能只有 Linux 和类似 Linux 的 ;这是我更喜欢的那个,顺便说一句

要获取分析文件,您必须安装并配置Xdebug ;查看文档的“分析 PHP 脚本”页面。

我通常做的是默认情况下不启用探查器(它会生成相当大的文件,并减慢速度),而是使用发送称为GET数据的参数的可能性,仅为我需要的页面激活分析。
我的php.ini的分析相关部分如下所示:XDEBUG_PROFILE

xdebug.profiler_enable = 0              ; Profiling not activated by default
xdebug.profiler_enable_trigger = 1      ; Profiling activated when requested by the GET parameter
xdebug.profiler_output_dir = /tmp/ouput_directory
xdebug.profiler_output_name = files_names

(有关详细信息,请阅读文档)

这个截图来自KcacheGrind中的一个C++程序:http://kcachegrind.sourceforge.net/html/pics/KcgShot3Large.gif
(来源:sourceforge.net

你会得到与PHP脚本完全相同的东西;-)
(对于KCacheGrind,我的意思是;WinCacheGrind不如KCacheGrind好...)

这使您可以很好地了解应用程序中需要时间的内容 - 有时它肯定有助于找到减慢一切^^

请注意,Xdebug 计算 PHP 花费的 CPU 时间;当PHP等待来自数据库的答案时(例如),它不起作用;只是等待。所以Xdebug会认为DB请求不需要花费太多时间!
这应该在SQL服务器上进行分析,而不是PHP,所以...


希望这是有帮助的:-)
玩得愉快!


答案 2

对于快速的东西,我这样做(在PHP中):

$startTime = microtime(true);
doTask(); // whatever you want to time
echo "Time:  " . number_format(( microtime(true) - $startTime), 4) . " Seconds\n";

您还可以使用探查器(如 http://xdebug.org/)。


推荐