PHP性能優化

PHP項目優化主要三個方面

一、PHP語言級性能優化

二、PHP周邊問題的性能優化

三、PHP底層


PHP語言級性能優化

1)少寫代碼,多用PHP自身能力。儘量使用PHP原生函數和常量,類如果要實現的功能有原生PHP函數,則不要自己用PHP實現

2)儘量使用性能更高的內置函數比如isset和array_key_exists都可以使用,則使用isset

3)產生額外開銷的錯誤抑制符@

4)合理使用內存(PHP有內存回收機制保底,但也請小心使用內存,建議:利用unset() 及時釋放不使用的內存)

5)儘量少的使用正則表達式(建議,利用字符串處理函數,實現相同邏輯)

6)循環內的計算式將會被重複計算。經常犯的錯誤是把一個SQL 操作放置到一個循環中,這就導致頻繁的訪問數據庫,更重要的是,這會直接導致腳本的性能低下。以下的例子,你能夠把一個循環操作重置爲一個單一的SQL語句。

例:

<span style="color:#333333;"><?php  
//建議
$str = 'hello world';
$strlen = strlen($str);
for($i = 0 ; $i<$strlen;$i++){


}

?></span>

?>

<span style="color:#333333;">foreach ($userList as $user) {
  $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
  mysql_query($query);
}
  過程:

1
INSERT INTO users (first_name,last_name) VALUES("John", "Doe")</span>
<span style="color:#333333;">替換成:</span>
<span style="color:#333333;"><pre name="code" class="html">$userData = array();
foreach ($userList as $user) {
    $userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
 }
$query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData);
mysql_query($query);
  過程:

1
INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...</span>

7)沒有原因不要copy變量。有時初級phper,爲了使代碼更加“乾淨”,常常把已經定義的變量重新賦值給另一個變量。這實際上就導致了雙重內存的消耗(當改變變量的時候),這就導致腳本的性能下降。比如一個用戶把一個512KB的變量在額外插入給另一個變量,那麼就會導致1MB的內存被消耗掉。


<span style="color:#333333;">$description = strip_tags($_POST['description']);
echo $description;
  </span>
替換爲:

<span style="color:#333333;"><span style="font-size:14px;">echo strip_tags($_POST['description']);</span></span>


PHP周邊問題性能優化

周邊:

1)Linux 運行環境
          文件存儲(硬盤,ssd)
          數據庫(
MySQL 索引使用,NoSQL+MySQL的配合使用,MySQL主從等)
          緩存(memcache redis)
2)減少文件類操作
      常見PHP場景的開銷次序:
讀寫磁盤、讀寫數據庫、讀寫內存、讀寫網絡數據
讀寫內存<< 讀寫數據庫<讀寫磁盤<讀寫網絡數據(基於文件系統)
3)優化網絡請求
例: 對方接口的不確定因素,網絡穩定性
設置超時時間
a)連接超時 (不能超過 200ms) b)讀超時(800ms)  c)寫超時(500ms)
2) 將串行請求並行化
a)使用curl_multi_*() b)使用swoole擴展
4)壓縮PHP接口輸出
5)PHP緩存重複計算內容
6)Smarty 調優和重疊時間窗口思想

7)使用xhprof分析項目源碼,找出瓶頸進行優化

工具:XHPorf(源自Fackbook的PHP性能分析工具)
           ab - 壓力測試
           vld - opcode 代碼分析

PHP底層


1)使用opcode擴展 緩存PHP的opcode代碼,減少PHP的編譯過程

2)CPU密集或者複雜功能使用PHP的pecl擴展(swoole等優秀擴展的使用)3)HHVM,百度再用,不過還是讓我們坐等PHPNG的問世,有PHPNG,HHVM就不是必須的選擇了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章