在许多框架中,都会有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,了解不深,上面内容中有不当或错误的地方欢迎指正。