咱們採用一問一答的方式,先來制定整個專題的情景,本次阿北去一家叫作「千度」的互聯網公司應聘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