MixPHP 是一個基于 Swoole 的高性能框架,CodeIgniter 是一個元老級的輕量級框架,Yii 是一個非常流行的框架,以下是三個框架的對比。
由于 Yii/CodeIgniter 是基于 Apache/PHP-FPM 的傳統框架,如果使用 MixPHP 的正常 Swoole 部署方式來對比,顯得有些不公平,由于 MixPHP 同時支持在 Apache/PHP-FPM 中運行,所以此次測試的 MixPHP 是部署在 Apache 之中。
環境
虛擬機: 4 核,1G
使用 ab 工具壓測,命令:ab -n 5000 -c 100 URL
Yii
Yii 關閉了 debug,并設置為 pro 環境。
默認控制器代碼如下,輸出一個 Hello World。
<?php
public function actionIndex()
{
return 'Hello World';
}
CodeIgniter
默認控制器代碼如下,輸出一個 Hello World。
<?php
public function index()
{
echo 'Hello World';
}
MixPHP
默認控制器代碼如下,輸出一個 Hello World。
public function actionIndex()
{
return 'Hello World';
}
開始測試
- 測試 Yii,QPS: 56.40
C:\Server\apache24vc11\bin>ab -n 5000 -c 100 http://www.b.com/
This is ApacheBench, Version 2.3 <$Revision: 1757674 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.b.com (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software: Apache/2.2.32
Server Hostname: www.b.com
Server Port: 80
Document Path: /
Document Length: 9 bytes
Concurrency Level: 100
Time taken for tests: 88.659 seconds
Complete requests: 5000
Failed requests: 0
Total transferred: 1080000 bytes
HTML transferred: 45000 bytes
Requests per second: 56.40 [#/sec] (mean)
Time per request: 1773.170 [ms] (mean)
Time per request: 17.732 [ms] (mean, across all concurrent requests)
Transfer rate: 11.90 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.0 1 29
Processing: 14 1765 4200.5 688 48084
Waiting: 14 1610 3741.9 682 46690
Total: 14 1766 4200.5 688 48084
WARNING: The median and mean for the initial connection time are not within a normal deviation
These results are probably not that reliable.
Percentage of the requests served within a certain time (ms)
50% 688
66% 1087
75% 1400
80% 1657
90% 3029
95% 7665
98% 14760
99% 24300
100% 48084 (longest request)
- 測試 CodeIgniter ,QPS: 144.42
C:\Server\apache24vc11\bin>ab -n 5000 -c 100 http://www.c.com/
This is ApacheBench, Version 2.3 <$Revision: 1757674 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.c.com (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software: Apache/2.2.32
Server Hostname: www.c.com
Server Port: 80
Document Path: /
Document Length: 8 bytes
Concurrency Level: 100
Time taken for tests: 34.621 seconds
Complete requests: 5000
Failed requests: 0
Total transferred: 1075000 bytes
HTML transferred: 40000 bytes
Requests per second: 144.42 [#/sec] (mean)
Time per request: 692.419 [ms] (mean)
Time per request: 6.924 [ms] (mean, across all concurrent requests)
Transfer rate: 30.32 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.7 1 22
Processing: 8 689 1014.3 480 13324
Waiting: 8 686 1012.2 478 13324
Total: 9 689 1014.3 480 13325
WARNING: The median and mean for the initial connection time are not within a normal deviation
These results are probably not that reliable.
Percentage of the requests served within a certain time (ms)
50% 480
66% 673
75% 810
80% 902
90% 1238
95% 1808
98% 3336
99% 6037
100% 13325 (longest request)
- 測試 MixPHP,QPS: 440.48
C:\Server\apache24vc11\bin>ab -n 5000 -c 100 http://www.a.com/
This is ApacheBench, Version 2.3 <$Revision: 1757674 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.a.com (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software: Apache/2.2.32
Server Hostname: www.a.com
Server Port: 80
Document Path: /
Document Length: 12 bytes
Concurrency Level: 100
Time taken for tests: 11.351 seconds
Complete requests: 5000
Failed requests: 0
Total transferred: 1025000 bytes
HTML transferred: 60000 bytes
Requests per second: 440.48 [#/sec] (mean)
Time per request: 227.026 [ms] (mean)
Time per request: 2.270 [ms] (mean, across all concurrent requests)
Transfer rate: 88.18 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.9 1 25
Processing: 4 222 822.4 15 10376
Waiting: 4 221 822.4 14 10376
Total: 4 222 822.4 16 10376
Percentage of the requests served within a certain time (ms)
50% 16
66% 69
75% 214
80% 364
90% 561
95% 762
98% 978
99% 1829
100% 10376 (longest request)
結論
虛擬機文件IO性能太差,Yii 做300并發直接不響應,只好降低到100并發數,同樣架構的測試結果 MixPHP 領先。
你也來測試一下吧,https://github.com/mixstart/mixphp
ITEM | DESC |
---|---|
Yii | 56.40 QPS |
CodeIgniter | 144.42 QPS |
MixPHP | 440.48 QPS |