PHP性能問題解決方法
什么情況之下,會遇到PHP性能問題?1:PHP語法使用不恰當。2:使用PHP語言做了它不擅長的事情。3:使用PHP語言連接的服務不給力。4:PHP自身的短板(PHP自身做不了的事情)。5:我們也不知道的問題?(去探索、分析找到解決辦法,提升開發境界)。
對線上站點做壓力測試的時候,我們一定要將請求數和并發數,特別是并發數要設置的比較低,我們不能對線上的網站造成壓力問題,不管是自己的還是別人的。PHP性能問題一般不會超過占整個項目性能的50%,一般在30%~40%。PHP性能問題的解決方向,三個層級。1:PHP語言級的性能優化,指的是PHP語法基本功能,這部分優化比較簡單易見、快速可行,比較快速看到效果。a:少寫PHP的代碼,多用PHP自身能力解決問題。性能問題:自寫代碼冗余較多,可讀性不佳,并且性能低,如代碼很長很長...PHP代碼越長PHP的執行效率越慢。為什么性能低?PHP代碼需要解析編譯為C語言,底層C語言又要編譯成匯編語言機器語言才能執行,這個過程在每次請求過來之后都要處理一遍,所以開銷很大(項目變大的話...)。
解決方法:
多使用PHP內置的變量、常量、函數。我們用PHP代碼實現的功能和使用PHP內置的函數實現的同樣功能差別是有的。 b:PHP內置函數的性能優劣。
情況描述
PHP內置函數之間依然存在快慢差別;少用PHP魔術方法;
建議:
多去了解PHP內置函數的執行實現復雜度。測試方法:比較效率測試,如用microtime()函數,取差值,精確到毫秒級別;Linux的time命令可以查看開銷。c:產生額外開銷的錯誤抑制符號“@”,最好別用(不管是性能優化和項目的健壯性等方面)。
@的邏輯是在代碼前和代碼結束后增加了Opcode,Opcode的作用就是忽略報錯,其實就是相當于增加了error_reporting設置,等級報錯為忽略(vld擴展可以查看被隱藏的Opcode);
d:合理使用內存。
情況描述: PHP有內存回收機制保底,但是也小心使用內存;
建議:
利用unset()及時釋放不使用的內存,比如一些數據庫多余字段(注意:unset()有時會出現注銷不掉的情況)
e:盡量少用正則表達式。情況描述:正則表達式的開銷大,使用起來簡單,但是性能低因為,正則表達式需要回溯;正則表達式越長,回溯的開銷越大,優化正則表達式是需要技術水平的,正則技術不達標,不要亂用正則。f:避免在循環內做運算。情況描述:循環內的計算式將被重復計算(我們在for循環或者while循環,會有重復計算,影響性能問題)。舉例:錯誤用法:$str = 'hello world';for($i = 0; $i < strlen($str); $i ++){ ...}
相關文章: