大家須知簡單的php性能優(yōu)化注意點
什么情況,可能遇到性能問題:
1.php語法使用的不恰當
2.使用php語言做了它不擅長做的事
3.用php語言連接的服務(wù)不給力
4.php自身的短板
5.我也不知道的問題
一般情況:php性能問題不超過二分之一(一般30%~40%)
php性能問題解決方向:
php語言級的性能優(yōu)化—>php周邊問題的性能優(yōu)化(連接的服務(wù),網(wǎng)絡(luò)環(huán)境)—>php語言自身分析和優(yōu)化
(php語言級)
優(yōu)化點:少寫代碼,多用php自身能力
問題:自寫代碼冗余較多,可讀性不佳,導致性能低
為什么低:php代碼需要編譯解析為底層語言,這一過程每次請求都會處理一遍,開銷大
方法:多使用php內(nèi)置變量、常量、函數(shù)
優(yōu)化點:php內(nèi)置函數(shù)的性能優(yōu)劣
情況描述:php內(nèi)置函數(shù),之間依然存在快慢差異
建議:多去了解php內(nèi)置函數(shù)的時間復雜度
優(yōu)化點:盡可能少用魔法函數(shù)
情況描述:php提供的魔法函數(shù),性能不佳
為什么性能低:為了為php程序員省事,php語言為你做了很多
好的方法:盡可能規(guī)避使用php魔法函數(shù)
優(yōu)化點:產(chǎn)生額外開銷的錯誤抑制符@
實際邏輯:在代碼開始前,設(shè)置報錯級別最高,結(jié)束后,再回復設(shè)置報錯級別。增加Opcode,忽略報錯
優(yōu)化點:合理使用內(nèi)存
情況描述:php有內(nèi)存回收機制保底,但也請小心使用內(nèi)存
建議:利用unset()及時釋放不適用的內(nèi)存(注:unset()出現(xiàn)注銷不掉的情況)
優(yōu)化點:盡量少的使用正則表達式
情況描述:正在表達式的回溯開銷較大,“沒有金剛鉆別攬?zhí)沾苫睢?br />
建議:利用字符串處理函數(shù),實現(xiàn)相同邏輯
優(yōu)化點:避免在循環(huán)內(nèi)做運算
情況描述:循環(huán)內(nèi)的計算式將會被重復計算
<?php $str="hello world"; 阿 //strlen($str)放在外面 for($i=0;$i<strlen($str);$i++){ //do something } ?>
優(yōu)化點:減少計算密集型業(yè)務(wù)
情況描述:php不適合密集型運算的場景
為什么?php語言特性決定了php不適合做大數(shù)據(jù)量運算
php適合場景:適合銜接Webserver與后端服務(wù)、UI呈現(xiàn)
優(yōu)化點:務(wù)必使用帶引號字符串做鍵值
情況描述:php會將沒有引號的鍵值當作常量,產(chǎn)生查找常量的開銷
建議:嚴格使用引號作為鍵值
--------------------------------------------
(php周邊問題的性能優(yōu)化)-
運行環(huán)境,文件儲存,數(shù)據(jù)庫,緩存,網(wǎng)絡(luò)
減少文件類操作
常見php場景的開銷次序:
讀寫磁盤、讀寫數(shù)據(jù)庫、讀寫內(nèi)存、讀寫網(wǎng)絡(luò)數(shù)據(jù)
讀寫內(nèi)存<<讀寫數(shù)據(jù)庫<讀寫磁盤<讀寫網(wǎng)絡(luò)數(shù)據(jù)
優(yōu)化網(wǎng)絡(luò)請求
網(wǎng)絡(luò)請求的坑:
1.對方接口的不確定因素
2.網(wǎng)絡(luò)穩(wěn)定性
如何優(yōu)化網(wǎng)絡(luò)請求?
1、設(shè)置超時時間
a)連接超時 200ms
b)讀超時 800ms
c)寫超時 500ms
2、將串行請求并行化
a)使用curl_multi_*()
b)使用swoole擴展
壓縮php接口輸出
緩存重復計算內(nèi)容
什么情況下做輸出內(nèi)容的緩存?
多次請求,內(nèi)容不變情況
重疊時間窗口思想
旁路方案
分析php自身分析和優(yōu)化:
用工具測試
PHP性能瓶頸解決方法:
Opcode cache(代碼編譯的最后一個環(huán)節(jié)進行緩存)PHP擴展APC做Opcode緩存用的
補充壓力測試軟件使用說明:
Ab -h
apache Benchmark(ab)由Apache提供的壓力測試軟件,安裝apache服務(wù)器時會自帶該壓測軟件
使用:./ab -n1000 -c100 http://www.baidu.com/
-n請求數(shù) -c并發(fā)數(shù) url目標壓測地址
以上內(nèi)容給大家介紹了簡單的php性能優(yōu)化注意點,希望本文分享能夠幫助到大家。
相關(guān)文章
yii2.0實現(xiàn)pathinfo的形式訪問的配置方法
這篇文章主要介紹了yii2.0實現(xiàn)pathinfo的形式訪問的配置方法的相關(guān)資料,需要的朋友可以參考下2016-04-04ThinkPHP的cookie和session沖突造成Cookie不能使用的解決方法
這篇文章主要介紹了ThinkPHP的cookie和session沖突造成Cookie不能使用的解決方法,需要的朋友可以參考下2014-07-07PhpStorm 2020.3:新增開箱即用的PHP 8屬性(推薦)
這篇文章主要介紹了PhpStorm 2020.3:新增開箱即用的PHP 8屬性的相關(guān)資料,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10Yii模型操作之criteria查找數(shù)據(jù)庫的方法
這篇文章主要介紹了Yii模型操作之criteria查找數(shù)據(jù)庫的方法,結(jié)合實例形式分析了Yii模型中criteria的實例化與查詢操作相關(guān)技巧,需要的朋友可以參考下2016-07-07laravel 配置路由 api和web定義的路由的區(qū)別詳解
今天小編就為大家分享一篇laravel 配置路由 api和web定義的路由的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09PHP實現(xiàn)數(shù)據(jù)分頁顯示的簡單實例
下面小編就為大家?guī)硪黄狿HP實現(xiàn)數(shù)據(jù)分頁顯示的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給的大家做個參考。一起跟隨小編過來看看吧2016-05-05