首頁  >  文章  >  後端開發  >  php效能優化的理論知識解說

php效能優化的理論知識解說

不言
不言轉載
2019-02-12 13:53:192638瀏覽

這篇文章帶給大家的內容是關於php效能優化的理論知識講解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

什麼情況下,遇到了PHP效能問題?

1 PHP語法使用的不恰當
2 使用PHP語言做不了它不擅長做的事
3 用php語言連接的服務不給力
4 PHP自身的短板
5 我也不知道的問題

效能問題解析

PHP的效能問題,佔整個專案效能問題的比例不到50%

效能最佳化項目,不要侷限於僅最佳化PHP

php語言等級的效能最佳化
            |
         #            |
            |
            |PH##s#p),最佳化元件優化#bache#abache#abache#cache#bache#bache#bache#bache#bache#自行下載)
ab是由Apache提供的壓力測試軟體,安裝apache伺服器時會自備此壓測軟體。

如何使用?

./ab -n1000 -c100 http://www.baidu.com/

 -n請求數 -c並發數

url目標壓測位址


PHP-壓力測試工具使用演示    

#主要關注每秒並發盡可能的多

請求耗時盡可能的少

多使用PHP自身能力

優化:少寫程式碼,多用PHP自身能力

效能問題: 自身程式碼冗餘較多,可讀性不佳,且效能低

#為甚效能低?

PHP程式碼需要編譯解析為底層語言,這個過程每次要求都會處理一遍,開銷大。

好的方法:

多使用PHP內建變數\常數\函數

PHP自身能力效能測試之程式碼準備

php程式碼運行流程

*.php ---Scanner---> Exprs -----Parser--->Opcodes---Exec--->Output

php內建函數之間的效能測試

優化點:php內建函數的效能優劣

狀況說明: php內建函數,之間依然存在區塊慢差異

好的建議: 多去了解PHP內建函數的時間複雜度

php內建函數之間的效能測試之程式碼測試

isset($arr[$i]); //平均50ms
array_key_exists($i,$arr);//平均85ms
減少PHP魔法函數的使用

情況描述:  PHP提供的魔法函數,性能不佳

為什麼性能低為了給PHP程式猿省事PHP語言為你做了很多

好的方法:盡可能規避使用PHP魔法函數


PHP 停用錯誤抑制符號

#@的實際邏輯

#在程式碼開始前結束後增加Opcode 忽略報錯

php -dv|d.active=1 -dv|d.execute=0 at.php

只是想查看並不是真的想執行

PHP-合理的使用記憶體和正規表示式

優化點:合理使用記憶體

PHP有記憶體回收機制保底,但也請小心使用記憶體

好的建議 利用unset() 及時釋放不使用的記憶體(註:unset ()出現註銷不掉的情況)盡量少的使用正規表示式

正規表示式的回溯開銷較大,

好的建議:

利用字串處理函數,實作相同邏輯

PHP-避免在迴圈內做運算

#最佳化點:避免在迴圈內做運算

情況說明:

循環內的計算式將會重複計算 

#程式碼範例: 

<?php
$str = "hello world";
for($i=0;$i<strlen($str);$i++)
{
    //do something
}

PHP-減少計算密集型業務

##PHP不適合密集型運算的場景

PHP語言特性決定了PHP不適合做大數據量運算

#PHP適合場景

適合銜接Webserver與後盾服務,UI呈現

PHP-務必使用引號字串做鍵值

PHP會將沒有引號的鍵值當做常數,產生查找常數的開銷

嚴格使用引號的字串作為鍵值

PHP週邊問題的分析與闡述

#PHP週邊都有什麼?

linux運作環境  php硬碟(檔案儲存)  資料庫(例如mysql) 快取網路

php週邊對PHP程式的影響分析

減少檔案類別的操作常見PHP場景的開銷順序:

讀寫磁碟讀寫資料庫讀寫記憶體讀寫網路資料

讀寫記憶體388b306294259864b64778073379f35d Process1 ->process2 ->process3 -> process4->

旁路方案: x.php -> Process1 ->process2(同時) ->Process3 (同時) -->Process4->

以上是php效能優化的理論知識解說的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除