Laravel中使用Profiler隨時掌握調試信息

在許多框架中,都會有Profiling相關的東西,Laravel也不例外,而且,它相當的好用。
Profiler是一個用於性能調試的工具,它提供記錄各種程序運行指標的工具以及查看他們的視圖。Profiler在Laravel 3以前是以一個bundle方式存在的(https://github.com/loic-sharma/Laravel-Profiler),但現在已經集成進核心庫了,原來那個readme.md也從代碼中消失了,因此在官方文檔中甚至找不到如何使用它的說明。本文就簡單的介紹一下Profiler的使用。

啓用Profiler

首先你得啓用Profiler,方法非常簡單,在你的<source>/application/config/application.php中將profiler設置爲true即可:
   

  'profiler' => true,


然後瀏覽你的程序,profiler會在頁面的下方加入一個profiler欄:



我們注意到,它提供了LOG、SQL、TIME、MEMORY幾個選項,這些選項分別顯示什麼東西,怎麼使用呢?

使用LOG

LOG的使用非常簡單,只需要在你需要打log的地方,調用Log::write()即可:

Log::write('error', 'Logging...');


或者

Profiler::log('error', 'Logging...');


再刷新剛剛的應用,LOG後面的0已經變爲1,點擊LOG後出現:



我們記錄的日誌已經出現了,就這麼簡單。

使用查詢日誌

當你打開Profiler後,所有數據庫查詢都會被記錄下來,比如我使用Eloqent:
    $u = Client\User::find(1);
    echo $u->profile->profile_id;




SQL窗口顯示了我的代碼執行的查詢,以及查詢花銷的時間。

執行時間


從前面給的鏈接中可以看到其README.MD裏有使用的說明,但使用方法有所變化,比如log_speed已經被更好的tick所取代:

  

  Profiler::tick('getting_userdata');
    $u = Client\User::find(1);
    echo $u->profile->profile_id;

    Profiler::tick('getting_userdata');
    Log::write('error', 'Logging...');
    Profiler::tick();


上面的代碼中以'getting_userdata'爲參數的調用會創建並更新一個名爲getting_userdata的時間記錄, 首次調用會創建它,再次調用會增加它的一個tick(記錄?),得到的結果是:




可以從中看出我獲取用戶信息花費了36.25ms。在調用時不給定參數則是default_timer,這個可以做簡單的時間記錄,另外可以通過tick的第二個參數傳入一個回調,它將在時間記錄後執行。至於更多的用處,大家慢慢發掘吧。

另外在時間記錄中還有一個比較有用的東西,就是Profiler::time函數,這個函數跟上面的tick功能相似,它的作用是測試一個函數(或者閉包)執行的時間。比如:

Profiler::time(function(){
        Client\User::find(2);
    });


將會輸出:


它的第二個參數和tick的第一個參數一樣,可以給這個函數執行時間記錄命名。

內存使用記錄

內存記錄顯示了本頁面執行時內存開銷,沒有太多額外的信息。

其它

開發環境和產品環境

你肯定不想客戶看到這個強大的Profiler Bar吧?我相信你知道怎麼做,對!在<source>/application/config/application.php中把profiler設置爲false而在<source>/application/config/local/application.php中重新設置爲true(假設你已經把application.php拷貝到了<source>/application/config/local目錄。)這樣你就可以盡情地使用Profiler而無須擔心產品環境看到它了。

PS:由於最近才接觸Laravel,瞭解不深,上面內容中有不當或錯誤的地方歡迎指正。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章