PHP+MYSQL優(yōu)化總結(jié)讓您的網(wǎng)站如飛一般加速
2019-04-12
【1】在循環(huán)中判斷時(shí),數(shù)值判斷使用恒等要比等于高效。
【2】在數(shù)組中,數(shù)組下標(biāo)是字母時(shí)一定要加上單引號(hào)或雙引號(hào)。因?yàn)?row['id']的效率是$row[id]的7倍。
【3】不要使用“@”去屏蔽錯(cuò)誤輸出。用@屏蔽錯(cuò)誤消息的做法非常低效。
若你真的想抑制報(bào)錯(cuò),可以通過(guò)設(shè)置error_reporting來(lái)控制,好比栗子中的,行前設(shè)置,行后取消即可。
【4】盡量不要在for循環(huán)中使用函數(shù),比如for ($x=0; $x < count($array); $x)每循環(huán)一次都會(huì)調(diào)用count()函數(shù)。
【5】注銷那些不必的變量尤其是大數(shù)組,以即開釋內(nèi)存。
【6】數(shù)據(jù)庫(kù)連接該使用完畢時(shí)當(dāng)閉掉。
【7】使用挑選分支語(yǔ)句(switch case)佳于使用少個(gè)if,else if語(yǔ)句。
【8】盡量使用include/require, 而不是include_once/require_once.
在《高性能PHP應(yīng)用開發(fā)》(下載http://pan.baidu.com/share/link?shareid=4170631476&uk=2016712711)一書中有個(gè)測(cè)試。
代碼:
<?php
require_once("ClassA.php");
require_once("ClassB.php");
require_once("ClassC.php");
require_once("ClassD.php");
<?php
require("ClassA.php");
require("ClassB.php");
require("ClassC.php");
require("ClassD.php");
echo 'Only testing require_once...';
類ABCD四個(gè)文件分別為四個(gè)空類,分別放在"ClassA.php","ClassB.php","ClassC.php","ClassD.php"四個(gè)文件中:
Class A{
}
Class B{
}
Class C{
}
Class D{
}
試用ab命令模擬10萬(wàn)個(gè)請(qǐng)求,同時(shí)有5個(gè)并發(fā)。
ab -c 10 -n 100000 localhost/index.php
結(jié)果顯示 require_once 響應(yīng)時(shí)間為99毫秒,每秒支持100.63個(gè)請(qǐng)求
而require響應(yīng)時(shí)間為94.8毫秒,減少5毫秒,同時(shí)并發(fā)數(shù)增加到105.44個(gè)。
參考:再一次, 不要使用(include/require)_once http://www.laruence.com/2012/09/12/2765.html
【9】不要重復(fù)造車。很多人在重復(fù)寫著已有的內(nèi)置function.
現(xiàn)如今的PHP:
- 有2700多個(gè)function (現(xiàn)在更多了)
- 80個(gè)核心的擴(kuò)展
- 154個(gè)pecl擴(kuò)展
選擇已經(jīng)存在的用吧,自己搞毛??!
【10】假如在代碼中具有大批耗時(shí)的函數(shù),最好能夠斟酌用C擴(kuò)大的方法完成它們。
【11】str_replace函數(shù)比preg_replace函數(shù)快,但strtr函數(shù)的效力是str_replace函數(shù)的四倍。
【12】合理運(yùn)用字符串比較函數(shù):strncmp / strncasecmp 要比 substr 什么的好很多,不管怎樣,都比preg_*系列的字符串匹配方法好。
【13】使用echo的多重參數(shù)取代字符串銜接。即使用逗號(hào)而不是點(diǎn)連接字符串。
例如:
$name = 'THOMAS';
echo 'Hello,My name is ' . $name; //不推薦
echo 'Hello,My name is ' , $name; //推薦,速度更快
【14】不要引入不需要的文件。每個(gè)php腳本文件的引入,都會(huì)造成zend編譯與執(zhí)行環(huán)節(jié)。編譯耗時(shí)遠(yuǎn)大于執(zhí)行的時(shí)間。
【15】獲取時(shí)間的方式:請(qǐng)不要一遍遍的調(diào)用 time()直接使用 $_SERVER['REQUEST_TIME']即可得到秒級(jí)別的時(shí)間戳,不必調(diào)用函數(shù)
【16】 Session 存儲(chǔ)。PHP默認(rèn)是把SESSION存儲(chǔ)在一個(gè)文件中。把存儲(chǔ)session分落在一個(gè)目錄中,減輕單位間的讀寫頻度。
- 為每個(gè)項(xiàng)目設(shè)置他們獨(dú)立的session存儲(chǔ)目錄
- 利用php.ini的配置 session.save_path=”N;/path”將session存儲(chǔ)在多個(gè)目錄中
【17】 Session不采用文件存儲(chǔ)。文件存儲(chǔ)不是一個(gè)優(yōu)秀的方案
- mm – 固話的共享內(nèi)存存儲(chǔ)
- apc – 用APC存儲(chǔ)、獲取、刪除
- memcache – 基于內(nèi)存的存儲(chǔ)服務(wù)
【18】代碼約簡(jiǎn)單,跑得越快。為啥,因?yàn)楹?jiǎn)單。
(邏輯上的簡(jiǎn)單)語(yǔ)法技巧 、 沒(méi)必要的封裝 、 一行一方法