我怎么能说哪一类(都做同样的工作)执行得更快?有软件可以测量吗?
最佳答案
你有(至少)两个解决方案:
相当“幼稚”的方法是在一段代码之前和之后使用 microtime(true) 来获取在其执行期间经过了多少时间;其他答案已经说了,并且已经给出了例子,所以我不会多说。
如果您想对几条指令进行基准测试,这是一个不错的解决方案;比如比较两种类型的函数——最好是做几千次,以确保任何“扰动元素”都是平均的。
类似这样,所以,如果你想知道序列化一个数组需要多长时间:
$before = microtime(true);
for ($i=0 ; $i<100000 ; $i++) {
serialize($list);
}
$after = microtime(true);
echo ($after-$before)/$i . " sec/serialize\n";
并不完美,但很有用,而且设置起来不需要太多时间。
如果您想确定哪个函数在整个脚本中花费大量时间,那么另一个非常有用的解决方案是使用:
- Xdebug扩展,为脚本生成分析数据
- 读取分析数据并为您提供可读内容的软件。我知道其中三个:
- Webgrind ;网页界面;应该可以在任何 Apache+PHP 服务器上运行
- WinCacheGrind ;仅在 Windows 上
- KCacheGrind ;可能只有 Linux 和 linux-like ;这是我更喜欢的那个,顺便说一句
要获取配置文件,您必须安装和配置 Xdebug ;看看Profiling PHP Scripts文档页面。
我通常做的不是默认启用分析器(它会生成相当大的文件,并且会减慢速度),而是使用发送一个名为 XDEBUG_PROFILE
的参数的可能性> 作为 GET 数据,仅为我需要的页面激活分析。
我的 php.ini 中与分析相关的部分如下所示:
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++ 程序:
(来源:sourceforge.net)
使用 PHP 脚本你会得到完全相同的东西 ;-)
(对于 KCacheGrind,我的意思是;WinCacheGrind 不如 KCacheGrind...)
这使您可以很好地了解应用程序中需要花费的时间 - 有时它肯定有助于定位 使一切变慢的函数^^
请注意,Xdebug 会计算 PHP 花费的 CPU 时间;当 PHP 正在等待来自数据库的答案时(例如),它不工作;只有等待。所以 Xdebug 会认为 DB 请求不需要太多时间!
这应该在 SQL 服务器上进行分析,而不是 PHP,所以...
希望这会有所帮助:-)
玩得开心!
关于php - 如何测量用 PHP 编写的代码的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1200214/