標籤:
先謝慕課網,這裡只做理論簡述
/**
* PHP效能最佳化
*
* 1.問題分析
* PHP文法使用不正確
* PHP不擅長的事
* PHP已連線的服務不給力
* PHP自身短板
* 其它原因
* 2.PHP項目效能問題占整個項目的效能問題
* PHP效能問題不會超過整個項目效能問題的一般,通常佔30%到40%,
* 最佳化整個項目不僅最佳化PHP效能,整個項目中PHP效能問題只佔一部分。
* 最佳化過程:
* 1.php語言級的效能最佳化;快速見到收益
* 2.php周邊問題的效能最佳化;web server,mysql等等
* 3.php自身分析最佳化;
*
* 壓力測試軟體
* Linux下安裝apache會內建ab壓力測試工具
* ./ab -n1000 -c100 http://www.baidu.com
* -n總請求 -c並發
* 注意如果有白名單需要先把本地ip加入白名單,否則會被認為ddos攻擊;
* 主要查看 Request per second 每秒接受的請求數,越多越好
* Time per request 每個請求耗時,越小越好
*
*/
/*
*
* PHP語言級的最佳化
* 1.少寫代碼,多用PHP自身的能力;
* 比如說使用PHP內建函數/變數/常量來使實現功能;
* 2.PHP內建函數的效能優劣,PHP內建函數,可能實現相同功能,但也存在差異;
* 比如說isset($arr[$i])/array_key_exists($i,$arr);
* 3.盡量少用魔法函數,PHP提供的魔法函數,效能不佳;
* 比如說__get(),time php test.php;
* 4.產生額外開銷的錯誤抑制符;
* 錯誤抑制符,就是在代碼前後添加Opcode,Opcode的作用就是忽略報錯。盡量不要使用。try throw好一些;
* 5.合理使用記憶體;
* 利用unset及時釋放不使用的記憶體;
* 6.盡量少使用Regex;
* 利用字串處理函數好一些;
* 7.避免在迴圈裡面做運算;
* 將計算放在迴圈之外,迴圈上做兩個變數的比較;
* 8.減少計算密集型業務;
* 大批量的資料處理,大批量的日誌分析,PHP的語言使用C寫的,PHP運算的開銷比C大;
* PHP使用銜接Web server和後端服務,UI呈現,字串文本處理;
* 9.務必使用帶引號字串做數組的索引值;
*
*
*
* vld工具可以查看opcode,是一個PHP擴充;
*
* PHP代碼運行流程:php代碼通過zend引擎漸進式掃描,解釋稱zend引擎自己能識別的文法,
* 通過解析,解析成opcodes,opcodes拿來執行,完成output;
* PHP緩衝都是緩衝Opcodes。
*/
/**
* PHP周邊問題的最佳化
* 1.Linux運行環境
* Linux伺服器中運行PHP,所以環境很重要,Linux跑的快與慢很重要!
* 2.檔案儲存體,硬碟的效能,硬碟的寫入讀取;
* 3.Mysql資料庫,基於檔案系統;
* 磁碟是硬體,資料庫是軟體;
* 資料庫的效能也決定著PHP的快慢;
* 4.緩衝,記憶體,硬體的記憶體,軟體的memcache,redis等;
* 5.網路
*
* 串連外部資料庫耗時需要 網路+資料庫,PHP檔案的耗時,也有周邊服務的耗時!
* 如果是資料庫的問題,最佳化文法就沒有用!
*
* 建議:
* 1.減少檔案類操作;讀寫磁碟/讀寫資料庫/讀寫記憶體/讀寫網路資料;
* 讀寫記憶體<讀寫資料庫<讀寫磁碟<讀寫網路資料;
* 常用的資料庫會用記憶體作為緩衝!先將只能寫入記憶體,寫入成功之後才操作,比直接操作磁碟快一些!
* 網路資料通過socket,也是一個磁碟操作!有網路延遲!無法確認機房網路是優良的!盡量減少讀寫網路的情況!
* 資料庫,磁碟,網路都是基於檔案系統,基於硬碟!
* 記憶體操作基於記憶體,直接與記憶體互動,開銷很小速度更快!
* 盡量多的操作記憶體資料庫,少操作磁碟網路資料!
*
* PHP請求網路介面的最佳化:
* 對方介面的不確定因素/網路不穩定性
* 1.設定逾時時間:連線逾時/讀逾時/寫逾時,建議連線逾時200毫秒,讀逾時800毫秒,不可大於1秒,寫逾時500毫秒!
* 2.將串列請求並行化:curl改成curl_multi_*()/使用swoole擴充
*
* PHP做介面,壓縮PHP介面輸出!
* 使用Gzip即可!client端更快的擷取資料,但是會產生額外的CPU開銷;資料小於100k的時候,壓縮沒有太大效果!
*
* 緩衝重複計算內容:
* 多次請求,內容不變情況,使用緩衝;常用在模版輸出上,smarty用cache功能;
*
* 重疊時間視窗思想:後面的任務不強依賴前一個任務;定時緩衝!
* 旁路方案:模版渲染環節!
*
*
*/
/**
* PHP效能的具體分析
* XHPorf工具;
* php --ri xhporf 查看是否支援xhporf
*/
/**
* PHP效能瓶頸解決方案:
* Opcode cache:PHP擴充APC;對Opcode做緩衝!php的pecl網站,看PHP擴充!
* 通過PHP擴充代替啊原始碼中高頻邏輯
* Runtime最佳化:HHVM
*/
/**
* PHP主要就是在讀寫記憶體,讀寫資料庫,讀寫磁碟,讀寫網路資料;
* PHP項目的最佳化也就是緩衝的最佳化/網路的最佳化/資料庫的最佳化,以及PHP部署在Linux環境上,Linux對PHP的效能也有影響!
* mysql的最佳化很重要,其他的最佳化也不能忽視!
* 讀寫記憶體比資料庫快,資料庫比磁碟快,磁碟比網路資料快,因為網路資料也是基於檔案系統,並且跟網路的穩定性相關;
* 通常盡量避免擷取網路資料,當必須使用網路介面提供的資料時,應該設定連線逾時,讀逾時,寫逾時等!
* 然後就是多操作緩衝,較少磁碟操作,可以使用memcache,redis緩衝較少讀寫磁碟的開銷!
* 資料庫雖然也是基於檔案系統的,但是他又比直接操作磁碟快,因為大部分資料庫都是用記憶體做緩衝,寫入緩衝成功就會返回結果,所以比直接操作磁碟要快!
* 總之就是多操作記憶體資料庫,少操作磁碟,網路資料!
* 另外Linux系統,Web server的效能也影響PHP的效能!
* 然後,再來說一下資料庫的最佳化,常用的就是MySQL資料庫,所以就是Mysql的最佳化!
*
*/
PHP效能最佳化簡述