PHP性能優化
阿新 • • 發佈:2018-09-27
cond 斜杠 except 解決 received pre 測試軟件 傳輸 graph
目錄
- 性能問題淺析
- 產生性能問題的原因
- 性能問題解決方案
- 壓力測試工具簡介 Apache Benchmark(ab)
- PHP語言級性能優化
性能問題淺析
PHP的性能問題在整個項目的性能問題中占比30%-40%,不到50%。 優化項目不局限於優化PHP。
產生性能問題的原因
- PHP語法使用不當
- 使用PHP語言做了不擅長的事情
- 使用PHP語言連接的服務不給力
- PHP自身的短板,PHP需要解析為底層語言:PHP --> C語言 --> 匯編語言,每次請求都需要處理一遍。
- 具體問題具體分析
知識點
graph LR A(php文件)-->|Scanner| B(Exprs) B-->|Parser| C(Opcodes) C-->|Exec| D(Output)
PHP文件經Zend引擎逐行掃描,保存成Zend引擎能識別的語法Exprs。然後經過解析生成Opcodes,再執行Opcode,產生結果。
PHP緩存的對象是Opcode
性能問題解決方案
- PHP語言級的優化(易)
- PHP周邊的性能優化(數據庫, 服務器, 緩存等)(難)
- PHP語言自身分析, 優化(底層)(較難)
壓力測試工具簡介 Apache Benchmark(ab)
簡介:ab是由Apache提供的壓力測試軟件。安裝Apache時服務器會自帶該壓測軟件。
使用方法:
./ab -n 1000 -c 100 http://www.baidu.com/ 註意如果不是請求某個具體文件,則必須添加最後的斜杠 -n 請求數 -c 並發數 URL 目標壓測地址
安裝方法:在安裝Apache時已經附帶安裝
返回結果
//服務器信息 Server Software: BWS/1.1 Server Hostname: www.baidu.com Server Port: 80 //文檔信息 Document Path: / Document Length: 111326 bytes //連接信息 Concurrency Level: 10 Time taken for tests: 0.333 seconds //整個測試持續時間 Complete requests: 100 //完成的請求數量 Failed requests: 97 //模擬請求中失敗的請求數量 (Connect: 0, Receive: 0, Length: 97, Exceptions: 0) Total transferred: 11240793 bytes //模擬請求中傳輸的總數據量,包含標頭數據 HTML transferred: 11145902 bytes //模擬請求中正文數據總量 Requests per second: 300.25 [#/sec] (mean) //每秒支持的請求總數 Time per request: 33.306 [ms] (mean) //滿足一個請求花費的總時間 Time per request: 3.331 [ms] (mean, across all concurrent requests) Transfer rate: 32959.33 [Kbytes/sec] received //m每秒接收到的字節總數 Connection Times (ms) min mean[+/-sd] median max Connect: 1 1 0.4 1 2 Processing: 18 30 6.7 26 44 Waiting: 9 13 3.8 11 26 Total: 19 31 6.7 28 45 Percentage of the requests served within a certain time (ms) 50% 28 66% 31 75% 36 80% 40 90% 42 95% 43 98% 44 99% 45 100% 45 (longest request)
在優化中
Requests per second
的值要盡可能的大,Time per request
的值要盡可能小。
PHP語言級性能優化
- 盡量使用PHP自身的內置變量、常量、函數
自寫代碼冗余較多,可讀性不強,並且降低性能。
PHP性能優化