標籤:時間 lan 問題 server 字串處理 網路 strlen 產生 並行
2015.8.17
解決方向:PHP語言級的效能最佳化PHP周邊問題的效能最佳化PHP語言自身分析、最佳化(PHP底層 C層面上的)
PHP語言級效能最佳化最佳化點:少些代碼,多用PHP自身能力 效能問題:自寫代碼冗餘較多,可讀性不佳,並且效能低 原因:PHP代碼需要編譯解析為底層語言,每次請求都會處理,開銷大
多使用PHP內建變數、函數、變數
php代碼運行流程:最佳化點:PHP內建函數的效能優劣 php內建函數之間依然存在快慢差異 多去瞭解PHP內建函數的時間複雜度最佳化點:盡量少用魔法函數 PHP提供的魔法函數,效能不佳
儘可能規避使用PHP魔法函數(只是盡量,可以進行對比)最佳化點:產生額外開銷的錯誤抑制符@ @符號邏輯:在代碼前、結束後,增加Opcode,忽略報錯最佳化點:合理使用記憶體 PHP有記憶體回收機制保底,但是也請小心使用記憶體 利用unset()及時釋放不適用的記憶體(註:unset()出現登出不掉的情況)最佳化點:盡量少的使用Regex Regex的回溯開銷較大,
利用字串處理代碼,實現相同邏輯
最佳化點:避免在迴圈計算式內做運算 迴圈內的計算式將會被重複計算
<?php
$str="hello word";
for($i=0;$i<strlen($str);$i++){
//do something
}
應該改為
<?php
$str="hello word";
$count=strlen($str);
for($i=0;$i<count;$i++){
//do something
}
最佳化點:減少計算密集型業務 PHP不適合密集型運算的情境 PHP語言特性決定了PHP不適合做大數量級的運算
PHP適合銜接WebServer與後端服務、UI呈現最佳化點:務必使用帶引號字串做索引值 PHP會將沒有引號的索引值當做常量,產生尋找常量的開銷
嚴格使用引號作為索引值
<?php
$array=array(
"key"=>"ddd",
"imooc"=>"ddfdfdf"
);
echo $array[key]."\n";//PHP內建錯誤修正功能
雖然$array["key"]和$array[key]的輸出一樣,但是$array["key"]效能更好 PHP周邊問題的效能最佳化最佳化運行環境 Linux運行環境
檔案儲存體
資料庫
緩衝
減少檔案類操作 常見PHP情境的開銷次序: 讀寫磁碟、讀寫資料讀寫記憶體、讀寫網路資料 讀寫記憶體<<讀寫資料庫<讀寫磁碟<讀寫網路資料 最佳化網路請求 問題:對方介面的不穩定因素、網路穩定性 方法:設定逾時時間
1.連線逾時 200ms
2.讀逾時 800ms 3.寫逾時 500ms
將串列請求並行化
1.使用curl_multi_*()
2.使用swoole擴充(最佳)
壓縮PHP介面輸出(壓縮資料) 使用Gzip即可實現輸出壓縮
壓縮輸出的利弊: 利:利用我們的資料輸出,Client端能更快擷取資料
弊:壓縮將參數額外的CPU開銷
緩衝重複計算內容 在多次請求。內容不變的情況可以使用內容緩衝,使用緩衝互用機制(就可以使用靜態化)重疊時間視窗思想旁路方案 PHP效能瓶頸解決方案: Opcode Cache:PHP擴充(APC、memcache等緩衝擴充) 擴充實現:通過PHP擴充代替原PHP代碼中高頻邏輯
Runtime最佳化:HHVM等
PHP效能最佳化