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

2024-04-14

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


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

相当“幼稚”的方法是在一段代码之前和之后使用 microtime(true) 来获取其执行期间经过了多少时间;其他答案都说了,并且已经举例了,我就不多说了。

如果您想对几条指令进行基准测试,这是一个很好的解决方案;例如,比较两种类型的函数——最好进行数千次,以确保对任何“扰动元素”进行平均。

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

$before = microtime(true);

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

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

虽然不完美,但很有用,而且设置起来并不需要太多时间。


如果您想确定哪个函数在整个脚本中花费大量时间,另一个解决方案非常有效,那就是使用:

  • The Xdebug http://xdebug.org/扩展,为脚本生成分析数据
  • Software that read the profiling data, and presents you something readable. I know three of those :
    • Webgrind https://github.com/jokkedk/webgrind;网页界面;应该适用于任何 Apache+PHP 服务器
    • WinCacheGrind http://sourceforge.net/projects/wincachegrind/;仅在 Windows 上
    • K缓存研磨 https://kcachegrind.github.io/html/Home.html;可能只有 Linux 和 linux-like ;这是我更喜欢的,顺便说一句

要获取分析文件,您必须安装并配置 Xdebug ;看看分析 PHP 脚本 http://xdebug.org/docs/profiler文档的页面。

我通常做的是默认情况下不启用探查器(它会生成相当大的文件,并减慢速度),但可以发送一个名为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

(阅读文档以获取更多信息)

This screenshot is from a C++ program in KcacheGrind : http://kcachegrind.sourceforge.net/html/pics/KcgShot3Large.gif
(source: sourceforge.net http://kcachegrind.sourceforge.net/html/pics/KcgShot3Large.gif)

You'll get exactly the same kind of thing with PHP scripts ;-)
(With KCacheGrind, I mean ; WinCacheGrind is not as good as KCacheGrind...)

这使您可以很好地了解应用程序中哪些内容花费了时间——有时它确实有助于定位the减慢一切的功能^^

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 设置 li 标签内 的字体颜色

    我的标记如下所示 div class c1 li class c2 a href blah a li div 我希望文字 blah 是红色的 c1 在其他地方使用 所以我想在不影响其他标记的情况下尽可能深入 在您的 css 文件中使用此样式
  • C#:绘制自己的条形图

    我正在尝试通过绘制一个简单的条形图C 但我从未尝试过 Graphics 和 Drawing 命名空间 我想生成一个 开始 和 结束 图形 然后以某种方式重复图像 以显示 长度 但我不知道如何做到这一点 如果您能指出正确的方向和 或您有示例代
  • 尽管包含必需的标头,但仍出现“‘sockaddr_in’未声明(在此函数中首次使用)”错误

    include
  • 如何将列表转换为可枚举

    我的以下代码有问题 public IEnumerable
  • 为什么 php 脚本速度变慢?

    我正在编写迁移脚本 该脚本从一个 MySQL 数据库中选择数据并通过原则导入到另一个 MySQL 数据库中 问题是 在创建每个实体块之后 我的脚本速度就会变慢 导入前 100 篇文章大约需要 5 秒 接下来的 100 篇文章需要 7 秒 接
  • T-SQL 中的随机加权选择

    如何根据所有候选行的应用权重在 T SQL 中随机选择表行 例如 我在表中有一组行的权重分别为 50 25 和 25 加起来为 100 但不是必须的 我想随机选择其中一个 其统计结果相当于相应的行重量 Dane 的答案包括以引入平方律的方式
  • 使用 ionic zip 时压缩失败

    我正在使用最新版本的 ionic zip 版本 1 9 1 8 我已经设置了 ionic zip 的属性ParallelDeflateThreshold 0 过去两个月 压缩机制工作得很好 突然 它停止工作了 压缩线程挂起 ionic zi
  • bash 是否存在内存泄漏?

    我在跑bashv4 4 19 1 在 Ubuntu 18 10 上发布 如果我跑valgrind在一个简单的脚本上 或者甚至bash version 我发现我确实丢失了 12 个字节的内存 但仍然可以访问大约 46kB 的内存 仍然可访问的
  • 删除 Pig 输出中的括号和逗号

    目前我的输出如下 130 1 131 1 132 1 133 1 137 1 138 2 139 1 140 1 142 2 143 1 我想要这样 130 1 131 1 132 1 我的代码如下 A LOAD user links sm
  • xcode9 / SceneKit - .dae 文件未加载到 SCNScene 中 - 返回 nil

    我正在尝试使用以下代码将 dae 文件加载到 SCNScene 中 let solutionScene SCNScene named art scnassets level1 dae print solutionScene rootNode
  • 使用 numpy 对数组进行高效阈值过滤

    我需要过滤一个数组以删除低于某个阈值的元素 我当前的代码是这样的 threshold 5 a numpy array range 10 testing data b numpy array filter lambda x x gt thre
  • Android Wear 通过删除数据项在 Data Api 上删除数据

    我的问题很简单 如何从DataAPI中删除数据 我在路径 model model id 中有一些数据 想要删除 model 中的所有数据 我使用代码 uri new Uri Builder scheme PutDataRequest WEA
  • 显示 PopupWindow 时未调用 onBackPressed

    嘿伙计们 所以目前我正在使用 PopupWindow 来显示应用程序内浏览器 然而 当按下后退按钮时 它什么也不做 我在另一个片段中使用 PopupWindow 然后使用语句在 FragmentActivity 中设置 PopupWindo
  • npm 错误!代码 EPEERINVALID

    我是新来的 我得到一个 npm 错误 代码 EPEERINVALID 详细信息如下 我目前正在运行以下内容 nvm 0 32 1 npm 2 15 9 节点 v4 5 0 grunt cli v1 2 0 咕噜 v0 4 5 而且 在进行软
  • Python 列表附加导致奇怪的结果

    我有一个非常奇怪的问题 这是示例代码 class SomeClass object a b def init self args kwargs self a 1 2 3 4 self b self a self a append 5 6 p
  • 获取二维数组的长度

    如果我不知道数组的第二个维度 如何获取它 array length仅给出第一个维度 例如 在 public class B public static void main String main int nir new int 2 3 Sy
  • LAST_INSERT_ID() MySQL

    我有一个 MySQL 问题 我认为这一定很简单 当我运行以下 MySql 查询时 我需要从 table1 返回最后插入的 ID INSERT INTO table1 title userid VALUES test 1 INSERT INT
  • 将 lambda 传递到函数模板中

    我正在学习 C 并且正在尝试实现一个二分搜索函数 该函数查找谓词所适用的第一个元素 该函数的第一个参数是一个向量 第二个参数是一个计算给定元素的谓词的函数 二分查找函数如下所示 template
  • 如何忽略 IntelliJ 中的“无法解析查询参数”错误

    我有一个疑问 Date dDateFrom String sql select a from tblA where timestamp gt ps this connection prepareStatement sql ps setTim
  • 如何测量用 PHP 编写的代码的速度? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我怎么能说哪一类 都做同样的工作 执行得更快呢 有没有软件可以测量它 你有 至少 两种解决方案 相当