咱们采用一问一答的方式,先来制定整个专题的情景,本次阿北去一家叫作“千度”的互联网公司应聘yii2工程师,故事就在面试中。php
角色介绍:web
我 靠颜值走天下。面试
面试官老李 带着眼睛的中年男人yii2
面对这样的问题,我再一次思考,yii2-debug到底能干点啥?对于一个yii2的扩展,它实现不了像xdebug那样强大的断点功能,可是由于它来自于yii2,所以它能用最简单的数据展现给你想要的东西,好比yii2每步都加载了什么模块、都运行了哪些SQL语句、捕获当前会员信息等等yii
相对比一行行看代码,这才是咱们须要的。性能
全面# yii2-debug能让你快速知道当前yii2版本、php版本、Http响应状态、当前的控制器和action、内存占有量等等,实在是务必强大的小强。优化
管事儿多# 经过Configuration面板能够快速查看当前yii2程序和PHP环境的配置,不再用phpinfo()了。spa
F12# 不用使用F12了,经过Request面板可以知道本次请求了的Headers、参数、相应数据以及SESSION会话等等。debug
无处不在# 能展现系统带的和你本身写的log记录,更好的是会告诉你某个日志来自于哪一个文件的哪行。3d
性能分析# 经过Profiling为你展现程序运行时间以及内存占有、还有详情和曲线哈。优化代码必备。
SQL# 一个页面用了哪些SQL语句,具体的不要不要的,Database面板统统展现给你。
资源我也管# Asset Bundles轻松的帮你分析出一个页面加载的资源类。
登录不登陆# User面板帮你展现当前登录会员的信息,方便你分析一些受权相关数据。
路由分析# 当你对URL进行重写的时候,Route面板实在是你诊断路由的最佳助手。
面对老李这样的发问,我大脑飞速,难道是我说的还不够么?哦,还有,yii2-debug支持扩展能力,好比咱们团队能够开发一个专门用于咱们本身的debug面板。
另外还有整合能力,yii2-debug能和PHPSTORM进行无缝整合。
我知道的就是这些。
老李不动表情的说了句:“好吧,这个问题先这样,在问你一个小学三年级水平的问题”。
咱们都知道yii2-debug是在web.php配置,而其自己就是一个模块而已,你给我说说web.php都哪些项可能对yii2-debug有影响。
丫的,有本事你就整四年级的,这是考我yii2-debug配置问题啊,幸亏哥以前作了功课。
的确,yii2-debug是一个模块,所以咱们也能够经过/index.php?r=debug来访问它,咱们先看看在web.php中yii2-debug的配置。
从代码咱们能知道如下几件事情
yii2-debug是须要预加载的
yii2-debug能进行权限限制,好比只能本地或某个ip访问,这个gii差很少。
特别说下预加载吧,咱们都知道yii能够作到须要一个模块的时候再调用,这也是yii性能很高的缘由之一,可是yii2-debug做为一个整个yii2程序的调试扩展,它必需要在程序开始那一刻就加载进来。
若是你不信,能够看下yii2-debug的log面板,我截图给你。
yii2预加载的库并很少,开发模式下就log、yii2-debug、gii,生成环境下只有log一个而已,预加载完之后,才有路由解析等等。
另一个地方会对yii2-debug有影响,就是日志的traceLevel问题,咱们之因此能在yii2-debug的Log面板看到每一个日志的出处,都是由于在web.php下有以下配置
'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], ], ],
就是其中的
'traceLevel' => YII_DEBUG ? 3 : 0,
3表示每一条日志记录都会记录与之相关的三层栈调用信息,0表示不记录任何相关的栈调用信息,在开发模式下,traceLevel为3,所以你看到了日志的出处。
固然这一切并不用咱们配置,系统默认就是这样,而当咱们部署程序到生产环境,traceLevel会自动由于Yii_DEBUG==false而变为0,不会发生性能上的损耗。
若是你忘记了,那还挺耗资源的。
最后要说明下面代码
if(YII_ENV_DEV){ //使用yii2-debug }
这里面的 YII_ENV_DEV 实际上是一个bool型,它由判断 YII_ENV === 'dev' 而来,而YII_ENV就在你的yii2入口文件index.php中。
defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev');// dev 和 prod
所以,当你部署yii2到生产环境那一刻,请修改上面代码为
defined('YII_DEBUG') or define('YII_DEBUG', false); defined('YII_ENV') or define('YII_ENV', 'prod');
则一切安好。
?????
“不错不错” 老李稍微点点头,而后说道:“这些都是皮毛,我先去趟wc,一会回来继续。”
好吧....肾很差的人都要常去洗手间,故事刚刚开始,下一篇为你讲解老李wc后那精彩万分的小强yii2-debug绝杀技和老李前列腺的问题。
个人博客 yii2原创文章及视频 http://nai8.me