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,了解不深,上面内容中有不当或错误的地方欢迎指正。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章