php - 如何测量用 PHP 编写的代码的速度?

标签 php testing performance measurement

我怎么能说哪一类(都做同样的工作)执行得更快?有软件可以测量吗?

最佳答案

你有(至少)两个解决方案:

相当“幼稚”的方法是在一段代码之前和之后使用 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++ 程序:http://kcachegrind.sourceforge.net/html/pics/KcgShot3Large.gif
(来源:sourceforge.net)

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

这使您可以很好地了解应用程序中需要花费的时间 - 有时它肯定有助于定位 使一切变慢的函数^^

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


希望这会有所帮助:-)
玩得开心!

关于php - 如何测量用 PHP 编写的代码的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1200214/

相关文章:

php - mysql更新数组很慢

java - 如何在测试范围内使用 m2e (Eclipse/Maven) 运行具有测试依赖项的命令行程序?

java - java中方法的执行时间

PHP/JS : Profilephoto resize and cutting

PHP-Admin,学生登录

javascript - 捕获表单字段并用它们重新填充表单

c# - 如何在 Visual Studio 中将编程文本注入(inject)到我的编码 UI 测试中(而不是录制的文本)?

Python - 在每一行的不同位置切片数组

c - 计算逻辑方程的最佳选择?

PHP:如何更改依赖于另一个变量的变量? (新手的东西)