【yii2調試神器】yii2-debug能力分析和配置項解析

咱們採用一問一答的方式,先來制定整個專題的情景,本次阿北去一家叫作「千度」的互聯網公司應聘yii2工程師,故事就在面試中。php

角色介紹:web

  • 我 靠顏值走天下。面試

  • 面試官老李 帶着眼睛的中年男人yii2

你給我說說yii2-debug是個什麼東西?

面對這樣的問題,我再一次思考,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

相關文章
相關標籤/搜索