abei1982 2017-06-05 15:31:00 2839次浏览 0条回复 1 0 0

我们采用一问一答的方式,先来制定整个专题的情景,本次阿北去一家叫做“千度”的互联网公司应聘yii2工程师,故事就在面试中。

角色介绍:

  • 我 靠颜值走天下。
  • 面试官老李 带着眼睛的中年男人

你给我说说yii2-debug是个什么东西?

面对这样的问题,我再一次思考,yii2-debug到底能干点啥?对于一个yii2的扩展,它实现不了像xdebug那样强大的断点功能,但是因为它来自于yii2,因此它能用最简单的数据展示给你想要的东西,比如yii2每步都加载了什么模块、都运行了哪些SQL语句、捕获当前会员信息等等

相对比一行行看代码,这才是我们需要的。

  • 全面# yii2-debug能让你快速知道当前yii2版本、php版本、Http响应状态、当前的控制器和action、内存占有量等等,实在是务必强大的小强。
  • 管事儿多# 通过Configuration面板可以快速查看当前yii2程序和PHP环境的配置,再也不用phpinfo()了。
  • F12# 不用使用F12了,通过Request面板能够知道本次请求了的Headers、参数、相应数据以及SESSION会话等等。
  • 无处不在# 能展示系统带的和你自己写的log记录,更好的是会告诉你某个日志来自于哪个文件的哪行。
  • 性能分析# 通过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的配置。

Snip20170605_8.png

从代码我们能知道以下几件事情

  • yii2-debug是需要预加载的
  • yii2-debug能进行权限限制,比如只能本地或某个ip访问,这个gii差不多。

特别说下预加载吧,我们都知道yii可以做到需要一个模块的时候再调用,这也是yii性能很高的原因之一,但是yii2-debug作为一个整个yii2程序的调试扩展,它必须要在程序开始那一刻就加载进来。

如果你不信,可以看下yii2-debug的log面板,我截图给你。

Snip20170605_9.png

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绝杀技和老李前列腺的问题。

原文位置 http://nai8.me/sapper-view.html?id=92

    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册