例 1.1. 1.测试用原生的PHPorig.php
<?php
class IndexController {
public function actionIndex() {
echo "Laruence";
}
}
$controller = new IndexController();
$controller->actionIndex();
?>
例 1.2. 2.测试用的Yaf的入口文件ap.php
<?php
$conf = array(
"application.directory" => "/home/laruence/local/www/htdocs/ap",
);
$app = new Yaf_Application($conf);
$app->run();
例 1.3. 2.测试用的Yaf的默认控制器Index.php
<?php
class IndexController extends Yaf_Controller {
public function actionIndex() {
$this->disableView(); //关闭视图输出
echo "Laruence";
}
}
?>
例 1.4. 请求1000次, 原生的PHP
$ ./ab -n1000 -c1 http://127.0.0.1/orig.php
Document Path: orig.php
Document Length: 8 bytes
Concurrency Level: 1
Time taken for tests: 0.463 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 130000 bytes
HTML transferred: 8000 bytes
Requests per second: 2159.41 [#/sec] (mean)
Time per request: 0.463 [ms] (mean)
Time per request: 0.463 [ms] (mean, across all concurrent requests)
Transfer rate: 274.14 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 0 0 0.2 0 5
Waiting: 0 0 0.2 0 5
Total: 0 0 0.2 0 5
Percentage of the requests served within a certain time (ms)
50% 0
66% 0
75% 0
80% 0
90% 0
95% 0
98% 0
99% 1
100% 5 (longest request)
例 1.5. 请求1000次, Yaf
$ ./ab -n1000 -c1 http://127.0.0.1/ap/index.php
Document Path: /ap/index.php
Document Length: 8 bytes
Concurrency Level: 1
Time taken for tests: 0.525 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 130000 bytes
HTML transferred: 8000 bytes
Requests per second: 1906.24 [#/sec] (mean)
Time per request: 0.525 [ms] (mean)
Time per request: 0.525 [ms] (mean, across all concurrent requests)
Transfer rate: 242.00 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 0 0 0.3 0 7
Waiting: 0 0 0.3 0 7
Total: 0 0 0.3 1 7
ERROR: The median and mean for the total time are more than twice the standard
deviation apart. These results are NOT reliable.
Percentage of the requests served within a certain time (ms)
50% 1
66% 1
75% 1
80% 1
90% 1
95% 1
98% 1
99% 1
100% 7 (longest request)
例 1.6. 请求1000次, 原生的PHP
$ ./ab -n1000 -c100 http://127.0.0.1/orig.php
Document Path: orig.php
Document Length: 8 bytes
Concurrency Level: 100
Time taken for tests: 0.287 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 130000 bytes
HTML transferred: 8000 bytes
Requests per second: 3478.82 [#/sec] (mean)
Time per request: 28.745 [ms] (mean)
Time per request: 0.287 [ms] (mean, across all concurrent requests)
Transfer rate: 441.65 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.0 0 6
Processing: 5 27 4.8 27 35
Waiting: 5 27 4.8 27 35
Total: 6 27 4.6 27 36
Percentage of the requests served within a certain time (ms)
50% 27
66% 28
75% 29
80% 31
90% 35
95% 35
98% 35
99% 35
100% 36 (longest request)
例 1.7. 请求1000次, Yaf
$ ./ab -n1000 -c100 http://127.0.0.1/ap/index.php
Document Path: /ap/index.php
Document Length: 8 bytes
Concurrency Level: 100
Time taken for tests: 0.316 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 130000 bytes
HTML transferred: 8000 bytes
Requests per second: 3165.24 [#/sec] (mean)
Time per request: 31.593 [ms] (mean)
Time per request: 0.316 [ms] (mean, across all concurrent requests)
Transfer rate: 401.84 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.0 0 6
Processing: 6 30 5.6 27 44
Waiting: 6 30 5.6 27 44
Total: 6 30 5.6 27 44
Percentage of the requests served within a certain time (ms)
50% 27
66% 32
75% 34
80% 36
90% 37
95% 40
98% 42
99% 42
100% 44 (longest request)
在测试的过程中, 通过vmstat观察, 机器的Idel一直保持在50-60左右.
总体来看, Yaf的性能比起原生的PHP, 损失的程度在10%左右, 另外考虑到因为Yaf有一次IO操作(载入Controller), 而原生的PHP并没有, 那么基本可以认为使用了Yaf框架以后, 性能损失在10%以内.
![]() |
重要 |
|---|---|
| 在测试的过程中, 并没有多次挑选最好的数据来把测试结果弄的漂亮点. 因为有一些时候, Yaf的性能几乎和原生的PHP的性能差别在2%以内. |
最后, 要说明一点: 测试结果, 只是一个简单的说明, 并不是为了证明什么结论. 因为框架的时间和真正应用逻辑的耗时比起来, 真的是很小的一部分.