標籤:
看到一個很有用的東東,收藏。。
http://blog.csdn.net/yukon12345/article/details/11408617
~~~~~~~~~~
使用:
設定好後就可以重啟wamp來看看效果:
我們使用XDEBUG_PROFILE作為url的一個參數寫在某個頁面上後,轉入頁面,然後到xdebug.profiler_output_dir所定的路徑下,就會發現產生了一個cachegrind.out.開頭的檔案,這就是webgrind需要分析的檔案
進入webgrind首頁面:頁面很簡單,右上方有一排下拉式清單
第一項參數參數其實我也糾結了一下,怎麼才容易想清楚和說明白:
webgrind把所有被調用函數/方法首先做一個排序,由高到低顯示。然後取出前N個,使他們耗時比率之和在90-100%之間。
要注意的是,最好不要選擇100%,這樣將會顯示所有被調用的函數/方法,如果是一個代碼複雜的頁面,那麼webgrind偶爾會被卡死。並且通常我們只要關注耗時前幾名的函數即可。
第二個就是選擇profile檔案。預設是分析最新一次的xdebug記錄。如果之前設定好路徑和記錄機制那麼我們就會發現下拉式清單裡有很多選項。
第三個選項是顯示百分比/毫秒/微秒。
下面的彩色進度條一樣的東東是耗時量比較條。藍代表php內建函數,灰色(這裡佔用很小看不出)代表requir/onclude,綠代表類方法,橙黃代表類其他過程函數 (使用者自訂函數)
結果查看
然後下面的分析列表的樣子:(選了毫秒作為顯示單位)
對於其中一些參數,我在結合我的官網翻譯以及stackoverflow看到的解釋是這樣的:
Invocation Count
被調用執行的次數
Total Self Cost - 函數自身開銷耗時 毫秒/ 微秒 /百分比(並不包含調用其他函數)
Total Inclusive Cost - 綜合耗時。包括自身耗時和調用所有的其他函數的耗時
細節分析
我經過實驗,才明確瞭解了幾個資料的區別:
測試代碼:
[php] view plaincopyprint?
- <?php
- //僅使用內建函數
- function t1(){
- time();
- }
- //自訂函數外再執行一次
- time();
- sleep(1);
- t1();
- //t2調用自訂函數
- function t2(){
- t1();
- }
- t2();
- //增加內建函數耗時
- function t3(){
- sleep(1);
- }
- t3();
- //t4增加調用自訂函數t3一次。
- function t4(){
- t3();
- sleep(1);
- }
- t4();
- //t5增加非調用函數式內耗 for迴圈10萬次,並調用t4
- function t5()
- { $u=0;
- for($i=0;$i<100000;$i++)
- { $u+=$i; }
- t4();
- }
- t5();
- ?>
得出:
因此我們可以得出最終結論:
- invocation count 表示的是整個php頁面從載入到執行完畢呈現,各種函數被調用的總次數(如sleep不管被哪個函數調用,總共頁面期執行了6次,t3被t4直接調用、t5間接調用一次,自身執行一次)
- total self cost 表示的是函數自身消耗(就如t5中10萬次迴圈消耗了31毫秒,sleep執行了2000毫秒,但自身消耗並不把其他任何函數調用算在其中)
- total inclusive cost 表示的是此函數從開始到執行完畢所用消耗 ,包括自身消耗和調用其他函數消耗
點擊一個父函數名後出現展開:
- Calls - 此函數中調用並執行的所有函數/方法名 次數 及耗時
- Total Call Cost - 被此父函數調用時,執行的總耗時 (the total time executing this function, when called from the parent function)
- Count - 被此父函數調用時,執行的次數。number of times the parent calls the child
如何看懂XDEBUG+WEBGRIND?(轉)