Ubuntu PHP測試環(huán)境中調(diào)試和分析代碼
Ubuntu PHP已被廣泛應(yīng)用但是也在不斷的更新,這里介紹Ubuntu PHP安裝設(shè)置使用,幫助大家安裝更新Ubuntu PHP系統(tǒng)。面向?qū)ο缶幊淘絹碓搅餍辛耍赨buntu PHP領(lǐng)域也不例外。所以你選擇了合適的設(shè)計(jì)模式,在***的framework上開發(fā)你的網(wǎng)站,抽象你的數(shù)據(jù)庫訪問以至于你都忘了SQL這種東西了。
接下來是什么呢?當(dāng)你開始轉(zhuǎn)向面向?qū)ο缶幊虝r(shí),撲面而來的是令人頭疼的訪問路徑問題(在你使用的framework和你寫的代碼之間)。然后你會(huì)發(fā)現(xiàn)你的網(wǎng)站并沒有變快-實(shí)際上,它更可能變得更慢。
面向?qū)ο缶幊痰闹饕康氖歉倪M(jìn)代碼質(zhì)量、可維護(hù)性和重用性,但是有時(shí)候隨之而來的代價(jià)是速度的變慢。當(dāng)我們存在一些潛在的執(zhí)行緩慢的代碼時(shí),我們不再能夠打開我們的簡單的Ubuntu PHP文件,從上到下的跟蹤它的執(zhí)行。我們怎么才能知道背后到底在怎么運(yùn)行呢?
Xdebug
Xdebug 2 (當(dāng)前還是 beta—我在用 2.0.0RC3) 是一個(gè)獨(dú)立的 Ubuntu PHP extension。它為在測試環(huán)境中調(diào)試和分析代碼提供了多種方法。這里,我們關(guān)心的是Ubuntu PHP腳本的概要分析(profiling)信息。
在你的apache/Ubuntu PHP開發(fā)環(huán)境上安裝Xdebug已經(jīng)超出了我們文章的范圍。但是我只是簡單的用’sudo pecl install xdebug-beta’,然后在Ubuntu PHP.ini中添加一行代碼就在我的Ubuntu 6.10 虛擬機(jī)上安裝好了它。
一旦你安裝好Xdebug2,下邊的代碼將為所以Ubuntu PHP接管的請求開啟“auto profiling”功能。
Ubuntu PHP_value xdebug.profiler_output_dir /tmp
Ubuntu PHP_value xdebug.profiler_output_name timestamp
Ubuntu PHP_value xdebug.profiler_enable 1
現(xiàn)在打開出現(xiàn)在/tmp目錄下的輸出文件…
WinCacheGrind
WinCacheGrind是從輸出文件獲取有用信息最簡單的辦法。它提供一個(gè)簡單的樹圖展示了Ubuntu PHP執(zhí)行中用到的class、function和filenames。最終要的是,它能告訴你每個(gè)function執(zhí)行的時(shí)間。
WinCacheGrind example(easy注:關(guān)于如何使用wincachegrind來進(jìn)行代碼優(yōu)化,可以參見我前段時(shí)間寫的《使用Xdebug優(yōu)化你的程序》)
KCachegrind
如果你在運(yùn)行KDE(在linux上或者通過fink在Mac OS X上,如果你敢的話),你可能愿意試一試 KCachegrind。它比WinCacheGrind復(fù)雜很多,但是它會(huì)把數(shù)據(jù)以一些非常有趣的方式呈現(xiàn)給你。
在這個(gè)例子中,callmap 視圖非常清晰的顯示了通過mysql_query()執(zhí)行的sql查詢花費(fèi)了最多的時(shí)間。Xdebug call map example這里我們看見了部分的callgraph,顯示了函數(shù)的交互。
(easy注:強(qiáng)烈推薦Rasmus Lerdorf的《Getting Rich with Ubuntu PHP5》,一個(gè)使用KCachegrind進(jìn)行優(yōu)化的經(jīng)典實(shí)例)
減少摩擦(原文:Grinding),增加cache想知道加速你的代碼最簡單的辦法?答案有三,Cache、Cache還是Cache。用你的新工具找出你代碼中比較慢的地方。確定慢查詢已經(jīng)用上了Mysql的Cahe。試試APC之類的Ubuntu PHP二進(jìn)制碼存儲(chǔ)。
用Memcahed緩存你的Ubuntu PHP對象。緩存你生成代碼的HTML中常見的部分。在發(fā)送頁面前緩沖整個(gè)頁面。用 Expires, ETag 和 Last-Modified HTTP headers讓用戶緩沖你的頁面。cache層越多越好。
More Xdebug
xdebug遠(yuǎn)不止輸出概要分析-我把它看成后端開發(fā)者的Firebug。我推薦每一個(gè)從事Ubuntu PHP相關(guān)開發(fā)的人在他們的測試環(huán)境下裝xdebug,即使只是為了能輸出彩色的全棧跟蹤的Ubuntu PHP錯(cuò)誤信息。從Google Summer of Code Project來看,支持即時(shí)交互的Xdebug很快就會(huì)可用了~
【編輯推薦】