網(wǎng)頁(yè)訪問(wèn)速度的提升亭病,是可以通過(guò)代碼的優(yōu)化來(lái)實(shí)現(xiàn)的嘶居。代碼的優(yōu)化,并不是說(shuō)代碼越少越好胸蛛,而是主要看代碼的運(yùn)行能力和執(zhí)行效率,看其消耗CPU和內(nèi)存的多少泞当。例如Facebook近來(lái)就宣布通過(guò)代碼優(yōu)化而將網(wǎng)站性能提高了一倍民珍,平均訪問(wèn)時(shí)間從5s降至2.5s,這個(gè)結(jié)果無(wú)疑是極其誘人的嚷量。
PHP是一門很多人正在使用的語(yǔ)言,在網(wǎng)站開發(fā)上PHP的使用廣泛度超過(guò)ASP和ASP.NET嗜历,看看時(shí)下流行的CMS和博客用什么語(yǔ)言來(lái)開發(fā)的就知道了抖所。
其實(shí)PHP入門很容易,尤其是對(duì)于一個(gè)已經(jīng)接觸過(guò)程序編寫的人來(lái)說(shuō)暴匠,而對(duì)于沒有接觸過(guò)程序語(yǔ)言的菜鳥來(lái)說(shuō)傻粘,學(xué)習(xí)用PHP做一個(gè)輸出hello world的網(wǎng)頁(yè)也很輕松。
然而要編寫高效率的代碼弦悉,并不是所有懂程序的人都可以編寫出來(lái)的,這需要經(jīng)過(guò)多年的研究積累和經(jīng)驗(yàn)總結(jié)崇败。
本文將給大家提煉一些PHP代碼優(yōu)化的實(shí)例肩祥,利用這些優(yōu)化,PHP代碼的運(yùn)行能力將會(huì)大大提高混狠,速度提升5倍以上有些情況下并不是不能出現(xiàn)。
1贡避、echo 比 print 快
echo和print是PHP程序中經(jīng)常使用的指令,尤其是需要調(diào)試的時(shí)候湖饱。echo和print都能輸出一段信息杀捻,但經(jīng)測(cè)試發(fā)現(xiàn),echo運(yùn)行速度會(huì)比print快致讥,因此在程序編寫是應(yīng)使用echo而非print。但是有時(shí)候也需要用到print墓拜,echo不能完全代替print请契。請(qǐng)看php echo()和print()有什么區(qū)別。
2姚糊、連接符用逗號(hào)而不是句號(hào)
php里逗號(hào)和句號(hào)都可以起到連接符的作用救恨,關(guān)于如何優(yōu)化輸出释树,可以看這里如何優(yōu)化php字符串echo輸出。
此外奢啥,輸出多個(gè)字符串時(shí),用逗號(hào)代替句點(diǎn)來(lái)分隔字符串寂纪,速度更快赌结。
3、在執(zhí)行for循環(huán)之前確定最大循環(huán)數(shù)拟杉,不要每循環(huán)一次都計(jì)算最大值量承。
這條準(zhǔn)則同樣適用于任何語(yǔ)言穴店,這個(gè)是編程習(xí)慣拿穴,但這個(gè)習(xí)慣很不好,不管你使用什么語(yǔ)言默色。
// 在每次循環(huán)中sizeof函數(shù)都要被調(diào)用
for ($i = 0; $i < sizeof($post_data); $i++)
{
do_something();
}
// 您可以在循環(huán)起始部分對(duì)這個(gè)不變的量賦值
for ($i = 0, $size = sizeof($post_data); $i < $size; $i++)
{
do_something();
}
4该窗、使用選擇分支語(yǔ)句(譯注:即switch case)好于使用多個(gè)if弟蚀,else if語(yǔ)句义钉。
if else if 的使用非常普遍规肴,在其他語(yǔ)言里也一樣,這個(gè)寫法好像更符合人的說(shuō)話習(xí)慣拖刃,但是在程序里這樣寫并不太好,它在效率上比switch case要低央碟。所以均函,一旦程序里需要多個(gè)判斷時(shí),就應(yīng)該用switch case而不要再用if else if else if這樣洛勉。
5如迟、數(shù)據(jù)庫(kù)連接當(dāng)使用完畢時(shí)應(yīng)關(guān)掉
在操作數(shù)據(jù)庫(kù)時(shí),很多程序員往往忘記關(guān)掉數(shù)據(jù)庫(kù)連接殷勘,或許他們沒有這個(gè)習(xí)慣。數(shù)據(jù)庫(kù)連接是需要消耗內(nèi)存為代價(jià)的劳吠,連接數(shù)越多內(nèi)存消耗就越多引润,所以在實(shí)際應(yīng)用中都必須及時(shí)關(guān)閉不需要用到的連接,以釋放內(nèi)存痒玩,緩解服務(wù)器壓力淳附。
6议慰、錯(cuò)誤消息代價(jià)昂貴
錯(cuò)誤消息一般用于調(diào)試,它的執(zhí)行效率其實(shí)是很低的奴曙,速度上會(huì)比直接運(yùn)行慢很多别凹。所以,在程序不需要抓取錯(cuò)誤消息時(shí)洽糟,就不要用炉菲。
7坤溃、局部變量要合理使用
盡量不要在for循環(huán)中使用函數(shù)拍霜,比如for ($x=0; $x prop++)要比遞增一個(gè)局部變量慢3倍。
遞增一個(gè)未預(yù)定義的局部變量要比遞增一個(gè)預(yù)定義的局部變量慢9至10倍薪介。
僅定義一個(gè)局部變量而沒在函數(shù)中調(diào)用它祠饺,同樣會(huì)減慢速度(其程度相當(dāng)于遞增一個(gè)局部變量)。PHP大概會(huì)檢查看是否存在全局變量汁政。
8道偷、用單引號(hào)代替雙引號(hào)來(lái)包含字符串
實(shí)踐證明,用單引號(hào)代替雙引號(hào)來(lái)包含字符串记劈,這樣做會(huì)更快一些勺鸦。
因?yàn)镻HP會(huì)在雙引號(hào)包圍的字符串中搜尋變量,單引號(hào)則不會(huì)目木。當(dāng)然换途,只有當(dāng)你不需要在字符串中包含變量時(shí)才可以這么做。更多分析請(qǐng)看實(shí)例分析php單引號(hào)和雙引號(hào)的區(qū)別嘶窄。
9怀跛、mod_zip你用了嗎
mod_zip可作為Apache模塊,用來(lái)即時(shí)壓縮你的數(shù)據(jù)柄冲,并可讓數(shù)據(jù)傳輸量降低80%。
10忠蝗、緩存的使用
除非腳本可以緩存现横,否則每次調(diào)用時(shí)都會(huì)重新編譯一次。引入一套PHP緩存機(jī)制通掣笞睿可以提升25%至100%的性能戒祠,以免除編譯開銷。
盡量做緩存速种,可使用memcached姜盈。memcached是一款高性能的內(nèi)存對(duì)象緩存系統(tǒng),可用來(lái)加速動(dòng)態(tài)Web應(yīng)用程序配阵,減輕數(shù)據(jù)庫(kù)負(fù)載馏颂。對(duì)運(yùn)算碼 (OP code)的緩存很有用示血,使得腳本不必為每個(gè)請(qǐng)求做重新編譯。
11救拉、網(wǎng)頁(yè)用html而非php
毫無(wú)疑問(wèn)难审,html靜態(tài)頁(yè)面的訪問(wèn)速度是最快的,現(xiàn)在的CMS亿絮,都是可以在后臺(tái)生成全站HTML靜態(tài)頁(yè)面的告喊,這不僅可以提高用戶訪問(wèn)網(wǎng)頁(yè)的速度,而對(duì)于搜索引擎的收錄和排名也是非常有利的派昧。
以上幾點(diǎn)是本文提煉出來(lái)的PHP優(yōu)化方法黔姜,當(dāng)然,優(yōu)化PHP絕非僅此一點(diǎn)蒂萎,所謂學(xué)無(wú)止境秆吵,許許多多的優(yōu)化方法和技巧,需要我們?cè)趯?shí)踐中不斷總結(jié)和運(yùn)用岖是。