PHP性能優化
一 什么情況下會產生性能問題
1.php語法使用不恰當
2.使用php做了它不擅長的事
3.php語言連接的服務不給力
4.php自身的缺陷
5.其他問題
二 為什么要解決php性能問題
項目中或多或少都會有一些性能問題,php性能問題是其中一部分,占比一般30%-40%
三 php性能優化的解決方向
php語言級的優化
1.少寫代碼,多用php自身能力 代碼越長,執行時間越長
1)使用內置函數,常量,變量 我們編寫的代碼要經過逐行檢索然后放到自身引擎中,通過引擎編譯最后執行,使用內置函數變量 預編譯好的,節省編譯時間,性能有了提升
2)盡可能少用魔法函數 魔法函數性能並不佳,耗時較長
3)錯誤抑制符 在底層操作代碼會多出begin_silence和end_silence,會產生額外的開銷,降低性能
2.合理使用內存 大量使用內存會導致php運行緩慢,需要及時釋放,小心使用內存。 可以利用unset()及時釋放不使用的內存
3.少用正則表達式 性能簡單,需要回溯,開銷大,性能低。可以利用字符串函數,代替正則
4.避免在循環里面進行運算 可以將計算的表達式放到循環外,賦值給一個變量,再循環內直接使用變量
5.減少密集型運算的業務 php適合銜接webserver和后端以及ui呈現,作為一個紐帶的作用。webserver來請求,交給php,php做一些參數處理,將請求發給后端,等待后端相應,再將信息傳遞給webserver
6.務必使用帶引號的字符串來做鍵值 php會把沒有引號的鍵當作值常量,然后找常量,把這個常量當作key值輸出,會產生額外的開銷
php周邊問題的優化
周邊的服務:網絡環境,服務器環境,數據庫環境等
優化分類:
1.減少文件類的操作 讀寫內存<<讀寫數據庫<讀寫磁盤<讀寫網絡數據 最好從內存中讀取數據
2.優化網絡請求
1)設置超時時間(連接超時 200ms,讀超時 800ms,寫超時 500ms)
2)將串行請求並行化 使用curl_multi函數
3.壓縮php接口輸出 有利於數據輸出,客戶端能更快獲得數據 壓縮占用服務器cpu,會給cpu增加額外開銷,重復字符多,壓縮效果較好
4.緩存重復計算內容 多次請求,內容不變
接收請求,查看緩存,沒有緩存,進行查詢,返回給緩存,返回
接收請求,查看緩存,有緩存,返回
緩存常用於項目中的模板 smarty支持caching cache_start
5.重疊時間窗口思想 執行完所有項目耗時少 當后面的項目不依賴前一個項目時可用
6.旁路方案 后面項目不依賴於前一項目可用,可以有多個旁路
場景:smarty模板渲染和拼接
php語言自身的分析,優化 底層C語言的分析優化
利用opcode cache:可以用php擴展apc框架
opcode cache:當解釋器完成對代碼的分析后,將他們生成可以直接運行的操作碼。目的是避免重復編碼,減少cpu和內存開銷
php性能問題的具體分析
工具:XHProf facebook開源的一個php輕量級的性能分析工具
性能開銷低,可以用在生產環境中,可以由程序開關控制是否進行profile