我怎麼能說很多(哪些人都做同樣的工作)哪個班級執行得更快?有沒有一個軟件來衡量?我如何測量用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