1. 程式人生 > >PHP性能優化

PHP性能優化

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性能優化