PHP效能優化總結

2021-10-12 07:16:52 字數 2168 閱讀 1463

php語法使用不恰當

使用php語言做了它不擅長做的事

用php語言連線的服務不給力

php自身的短板

我也不知道的問題

php效能問題一般佔專案的30%左右,我們做專案優化的時候不要侷限於php

php語言級的效能優化

php周邊問題的效能優化

php語言自身分析、優化

優化點:少寫**,多用php自身能力

效能問題:自寫**冗餘較多,可讀性不佳,並且效能低

為什麼效能低?:

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

php->scanner->exprs->parser->opcodes->output

好的方法:多使用php內建變數、常量、函式

總結:這些變數、常量、函式還是要死記硬背,不然關鍵的時候用的時候根本想不起來

優化點:盡可能少用魔法函式

情況描述:php提供的魔法函式,效能不佳

為什麼效能低?:為了給php程式猿省事

好的方法:盡可能規避使用php魔法函式

舉例:測試魔法函式__get()效能

總結:魔法函式本來就是用來方便程式設計師的,如果只是為了這一點點效能開銷就捨棄,得不償失,我覺得這個點也沒必要太較真

優化點:產生額外開銷的錯誤抑制符@

情況描述:php提供的錯誤抑制符只是為了方便「懶人」

@的實際邏輯:在**開始前、結束後,增加opcode,忽略報錯

好的建議:建議盡量不要使用@錯誤抑制符

優化點:合理使用記憶體

情況描述:php有記憶體**機制保底,但也請小心使用記憶體

好的建議:利用unset()及時釋放不使用的記憶體

優化點:盡量少的使用正規表示式

情況描述:正規表示式的回溯開銷較大,」沒有金剛鑽別攬瓷器活「

好的建議:利用字串處理函式,實現相同邏輯

優化點:避免在迴圈內做運算

情況描述:迴圈內的計算式將被重複計算

優化點:減少計算密集型業務

情況描述:php不適合密集型運算的場景(大批量資料分析,大批量日誌分析)

為什麼?

php的語言特性決定了php不適合做大資料量運算。

php適合場景:適合銜接webserver與後端服務,ui呈現

優化點:務必使用帶引號字串做鍵值

情況描述:php會將沒有引號的鍵值當做常量,產生查詢常量的開銷

好的建議:嚴格使用引號作為鍵值,而且最好單引號

周邊:linux執行環境

檔案儲存

資料庫快取

網路常見php場景的開銷次序

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

優化網路請求

網路請求的坑

1.對方介面的不確定因素

2.網路穩定性

如何優化網路請求?

1.設定超時時間

a.連線超時200ms

b.讀超時 800ms

c.寫超時500ms

2.將序列請求並行化

a.使用curl_multi_*()

b.使用swoole擴充套件

壓縮php介面輸出

如何壓縮?

使用gzip即可

壓縮輸出的利與弊?

利:利於我們的資料輸出,client端能更快獲取資料 30k以下

弊:額外的cpu開銷 100k以上

快取重複計算內容

什麼情況下做輸出內容的快取?

多次請求,內容不變

重複重疊方案:併發代替序列,前後兩個業務沒有強依賴才能使用

php效能瓶頸究極方法

opcode cache:php擴充套件apc(pecl.php.net擴充套件**)

擴充套件實現:通過php擴充套件代替原php**中高頻邏輯(c底層所以速度快)

runtime優化:hhvm

php效能問題的具體分析

工具:xhporf(源自facebook的php效能分析工具)、xdebug

實踐:通過分析wordpress程式,做優化!

總結:這個工具確實很有用,優化的時候可視性很強

vld opcode**分析

壓力測試工具(ab)

./ab -n1000 -c100

總結:jmeter是ab的視覺化工具,更方便

優化php效能

優化php效能的五個實用技巧 以下是五個優化技巧,熟練掌握後對於開發還是很有幫助的。1.對字串使用單引號 php 引擎允許使用單引號和雙引號來封裝字串變數,但是這個是有很大的差別的!使用雙引號的字串告訴 php 引擎首先去讀取字串內容,查詢其中的變數,並改為變數對應的值。一般來說字串是沒有變數的,所...

php 效能優化

1 使用 優化工具 zend optimizer,原理是通過檢測zend引擎產生的中間 並且優化他 來提高速度 安裝 zend optimizer,在php.ini裡新增 zend optimizer.optimization level 15 zend extension path to zend...

PHP效能優化

php效能優化 程式優化 1 最好是使用字串連線與單引號,而不是雙引號字串。2 不要隨便複製變數。3 盡量使用echo輸出字串。4 盡量不要使用連線符,輸出多個變數時可以用逗號分開。5 盡量使用switch代替if else。6 不做無畏的替換,先用strpos查詢再做替換,不要做替換效率高200 ...