我怎么能说很多(哪些人都做同样的工作)哪个班级执行得更快?有没有一个软件来衡量?我如何测量用PHP编写的代码的速度?
回答
你(至少)两种解决方案:
相当“天真”的人在使用microtime中(真)tobefore和代码的一部分之后,拿到了多少时间在执行过程中已通过;其他答案已经说明了,并且已经给出了例子,所以我没有多说。
这是一个不错的解决方案,如果你想基准几条指令;比如比较两种类型的函数,比较好如果做了几千次,以确保任何“perturbating元素”被平均
这样的事情,所以,如果你想知道需要多长时间序列化的数组:
$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;只在窗户上
- KCacheGrind;大概只有Linux和linux一样;这是一个我喜欢,顺便说一句
要获得剖析文件,您必须安装和配置XDebug的;请查看文档的Profiling PHP Scripts页面。
我通常做的不是默认启用(它会产生相当大的文件,并会减慢速度)探查器,但使用的可能性来发送一个名为XDEBUG_PROFILE
参数作为获取数据,为刚刚启动剖析我需要的页面。
我的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
(阅读更多信息的文档)
这张截图是从C++程序KcacheGrind:http://kcachegrind.sourceforge.net/html/pics/KcgShot3Large.gif http://kcachegrind.sourceforge.net/html/pics/KcgShot3Large.gif
你会得到完全一样的东西与PHP脚本;-)
(与KCacheGrind,我的意思是; WinCacheGrind不如KCacheGrind ...)
这可以让你得到一个什么样的时间需要在应用程序中的美景 - 这有时definitly有助于找到的功能是一切放慢^^
注意Xdebug的计算花费的CPU时间通过PHP;当PHP正在等待来自数据库的答案时(例如),它不起作用;只有等待。所以Xdebug会认为DB请求不需要太多时间!
这应该在SQL服务器,而不是PHP上成型,所以......
希望这有助于:-)
玩得开心!
如果是可以在Web上下文外部测试的东西,我只需使用Unix time
命令。
窗户怎么样? – 2009-07-29 17:58:36
为了快速的东西,我这样做(在PHP):
$startTime = microtime(true);
doTask(); // whatever you want to time
echo "Time: " . number_format((microtime(true) - $startTime), 4) . " Seconds\n";
你也可以使用一个分析器像http://xdebug.org/。
为了获得更高的准确性,我建议(a)使用循环和平均时间,并(b)为每个测试的东西使用单独的文件。如果你在一个剧本中有多个时机,他们的顺序有时会有所作为。 – DisgruntledGoat 2009-07-29 16:48:14
您可以使用诸如存储时间戳或microtime()之类的基本内容来计算所需时间。这很容易做到,但不是很准确。也许更好的解决方案是Xdebug,我从来没有使用它,但它似乎是我能找到的最着名的PHP调试器/分析器。
Zend Studio已经内置支持使用XDebug或ZendDebugger进行分析。它会分析你的代码,告诉你每个函数花了多长时间。这是找出瓶颈位置的绝佳工具。
我最近一直在使用XHProf http://pecl.php.net/package/xhprof。它最初是由Facebook开发的,它带有一个体面的网络界面。
我想与大家分享一个自制功能,我用来衡量任何现有功能的速度可达10个参数:
function fdump($f_name='', $f_args=array()){
$f_dump=array();
$f_result='';
$f_success=false;
$f_start=microtime();
$f_start=explode(' ', $f_start);
$f_start=$f_start[1] + $f_start[0];
if(function_exists($f_name)){
if(isset($f_args[0])&&is_array($f_args[0])){
if($f_result=$f_name($f_args)){
$f_success=true;
}
}
elseif(!isset($f_args[1])){
if($f_result=$f_name($f_args[0])){
$f_success=true;
}
}
elseif(!isset($f_args[2])){
if($f_result=$f_name($f_args[0],$f_args[1])){
$f_success=true;
}
}
elseif(!isset($f_args[3])){
if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2])){
$f_success=true;
}
}
elseif(!isset($f_args[4])){
if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2],$f_args[3])){
$f_success=true;
}
}
elseif(!isset($f_args[5])){
if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2],$f_args[3],$f_args[4])){
$f_success=true;
}
}
elseif(!isset($f_args[6])){
if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2],$f_args[3],$f_args[4],$f_args[5])){
$f_success=true;
}
}
elseif(!isset($f_args[7])){
if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2],$f_args[3],$f_args[4],$f_args[5],$f_args[6])){
$f_success=true;
}
}
elseif(!isset($f_args[8])){
if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2],$f_args[3],$f_args[4],$f_args[5],$f_args[6],$f_args[7])){
$f_success=true;
}
}
elseif(!isset($f_args[9])){
if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2],$f_args[3],$f_args[4],$f_args[5],$f_args[6],$f_args[7],$f_args[8])){
$f_success=true;
}
}
elseif(!isset($f_args[10])){
if($f_result=$f_name($f_args[0],$f_args[1],$f_args[2],$f_args[3],$f_args[4],$f_args[5],$f_args[6],$f_args[7],$f_args[8],$f_args[9])){
$f_success=true;
}
}
}
$f_end=microtime();
$f_end=explode(' ', $f_end);
$f_end=$f_end[1] + $f_end[0];
$f_time=round(($f_end - $f_start), 4);
$f_dump['f_success']=$f_success;
$f_dump['f_time']=$f_time;
$f_dump['f_result']=$f_result;
var_dump($f_dump);exit;
//return $f_result;
}
例
function do_stuff($arg1='', $arg2=''){
return $arg1.' '.$arg2;
}
fdump('do_stuff',array('hello', 'world'));
返回
array(3) {
["f_success"]=>
bool(true)
["f_time"]=>
float(0) //too fast...
["f_result"]=>
string(11) "hello world"
}
我做了一个简单的计时课程,也许它的有用的人:
class TimingHelper {
private $start;
public function __construct() {
$this->start = microtime(true);
}
public function start() {
$this->start = microtime(true);
}
public function segs() {
return microtime(true) - $this->start;
}
public function time() {
$segs = $this->segs();
$days = floor($segs/86400);
$segs -= $days * 86400;
$hours = floor($segs/3600);
$segs -= $hours * 3600;
$mins = floor($segs/60);
$segs -= $mins * 60;
$microsegs = ($segs - floor($segs)) * 1000;
$segs = floor($segs);
return
(empty($days) ? "" : $days . "d ") .
(empty($hours) ? "" : $hours . "h ") .
(empty($mins) ? "" : $mins . "m ") .
$segs . "s " .
$microsegs . "ms";
}
}
用途:
$th = new TimingHelper();
<..code being mesured..>
echo $th->time();
$th->start(); // if it's the case
<..code being mesured..>
echo $th->time();
// result: 4d 17h 34m 57s 0.00095367431640625ms
如果你想一个框架的快速测试中的表现,你可以把的index.php文件
//at beginning
$milliseconds = round(microtime(true) * 1000);
//and at the end
echo round(microtime(true) * 1000) - $milliseconds;
每次您将获得执行时间毫秒。因为微秒在测试框架案例中不是很有用。
这里是一个直接回答你的问题
是有衡量一个软件?
是的,有。我想知道为什么有人还没有提到它。尽管上面提出的答案对于快速检查来说似乎很好,但从长远来看或者对于更大的项目来说不可扩展。
为什么不使用应用程序性能监视(APM)工具,它正是为此而构建的,还有更多。查看NewRelic,AppDynamics,Ruxit(全部都有免费版本)来监控每个应用程序的执行时间,资源使用情况以及方法级别的吞吐量。
- 1. 如何测量用Java编写的代码的速度? (AI算法)
- 2. PHP速度测试代码
- 3. 如何编写PHP代码
- 4. Java的JITter如何影响测量代码速度?
- 5. 如何编写测试类来测试我的代码?
- 6. 写入CUDA代码的低加速度
- 7. 如何编写我的代码来测试websocket事件?
- 8. 如何编写我自己的测试代码
- 9. 测试你的代码速度?
- 10. 速度测试网站的C#代码?
- 11. PHP的foreach代码的性能速度
- 12. 如何测量用编程语言编写的代码片段之间的相似度
- 13. R代码运行速度太慢,如何加速和重写此代码
- 14. 在Python中编写速度高效的代码
- 15. 我如何在PHP中使用Jquery时编写查询代码
- 16. 如何在JavaScript内编写php代码?
- 17. 如何编写一个php代码
- 18. 如何在PHP中编写html代码?
- 19. 速度如何:使用“函数”编写PHP代码或将其写为纯脚本?
- 20. 我的代码速度慢,CPU占用率高。如何改进?
- 21. 如何测量我的多线程代码如何缩放(加速)?
- 22. 如何先编写单元测试并稍后编写代码?
- 23. 如何提高Python代码的速度
- 24. 如何提高代码的速度?
- 25. 如何提高VBA代码的速度
- 26. 如何减慢代码的速度
- 27. 如何提高此代码的速度?
- 28. 如何编写需要重复测试代码的代码测试?
- 29. 如何去测试我的PHP脚本的速度?
- 30. 如何测量我的Web服务的平均速度?
非常感谢你... – risyasin 2014-02-20 12:49:26
QCacheGrind的windows构建存在:-) https://sourceforge.net/projects/qcachegrindwin – 2016-04-25 16:14:25