PHP框架性能测试报告
作为一个PHP开发者,而且是初创企业团队的技术开发者,选择开发框架是个很艰难的事情。
用ThinkPHP的话,招聘一个刚从培训机构出来的开发者就可以上手了,但是性能和后期代码解耦是个让人头疼的事情。不过很多第三方功能不需要自己写,众多大牛已经给铺好路了。
用Laravel的话,传说写起来很爽扩展性也够,但是学习成本有点高,总不能给初级开发者半个月的时间去学习框架吧。而且据说江湖人士透漏,Laravel性能不怎么样,文档也并不是特别丰富。
用Yii的话,语法有点啰嗦,前后端代码分离有点小麻烦,不过性能是非常好的,而且已经有众多国内大公司在使用了,出现意外可以快速的找到大牛答疑解惑。
不如做个简单的性能评测,选个性能出色的总不会出错
性能测试
测试时间:2016年05月06日
测试工具:siege(因为MAC系统的ab总是会出现pr_socket_recv:Connectionresetbypeer(54)的错误,所以选择了siege)
测试机器:MacProCorei5处理器/8GB内存/256GBSSD闪存
测试环境:ApachePHP5.6
框架版本:ThinkPHP3.2.3Laravel5.2Yii2.0.5
测试原则:每次测试循环5次,取中等数据
补充说明:所有项目都是让在子目录中
结果说明
Transactions:2119hits处理请求总数量 Availability:96.85%可用性 Elapsedtime:9.74secs运行时间 Datatransferred:1.31MB数据传输量 Responsetime:0.60secs响应时间 Transactionrate:217.56trans/sec每秒处理效率 Throughput:0.13MB/sec每秒处理数据 Concurrency:130.28并发 Successfultransactions:2162成功的请求 Failedtransactions:69失败的请求 Longesttransaction:2.85最长的单个请求 Shortesttransaction:0.01最短的单个请求
开始测试
增加一个控制器,并在控制器中输入10000次HelloWorld
并发50循环10次:
首先向我们走来的是ThinkPHP,看上去还行
Transactions:500hits Availability:100.00% Elapsedtime:2.81secs Datatransferred:52.45MB Responsetime:0.26secs Transactionrate:177.94trans/sec Throughput:18.67MB/sec Concurrency:47.10 Successfultransactions:500 Failedtransactions:0 Longesttransaction:0.48 Shortesttransaction:0.03
然后是Laravle,嗯,略微有些失望
Transactions:500hits Availability:100.00% Elapsedtime:13.33secs Datatransferred:52.45MB Responsetime:1.27secs Transactionrate:37.51trans/sec Throughput:3.93MB/sec Concurrency:47.55 Successfultransactions:500 Failedtransactions:0 Longesttransaction:3.64 Shortesttransaction:0.07
最后赛前比较看好的Yii
Transactions:500hits Availability:100.00% Elapsedtime:4.84secs Datatransferred:52.45MB Responsetime:0.46secs Transactionrate:103.31trans/sec Throughput:10.84MB/sec Concurrency:47.65 Successfultransactions:500 Failedtransactions:0 Longesttransaction:0.88 Shortesttransaction:0.04
并发200循环10次:
首先是ThinkPHP
Transactions:1977hits Availability:98.85% Elapsedtime:10.03secs Datatransferred:207.40MB Responsetime:0.95secs Transactionrate:197.11trans/sec Throughput:20.68MB/sec Concurrency:187.68 Successfultransactions:1977 Failedtransactions:23 Longesttransaction:1.22 Shortesttransaction:0.02
然后是Laravel
Transactions:1890hits Availability:94.50% Elapsedtime:51.85secs Datatransferred:198.27MB Responsetime:4.88secs Transactionrate:36.45trans/sec Throughput:3.82MB/sec Concurrency:178.00 Successfultransactions:1890 Failedtransactions:110 Longesttransaction:26.01 Shortesttransaction:0.07
最后是Yii
Transactions:1996hits Availability:99.80% Elapsedtime:18.95secs Datatransferred:209.39MB Responsetime:1.79secs Transactionrate:105.33trans/sec Throughput:11.05MB/sec Concurrency:188.57 Successfultransactions:1996 Failedtransactions:4 Longesttransaction:3.29 Shortesttransaction:0.10
没想到在没有优化的情况下,ThinkPHP的速度是最快的,Yii略微多一些,Laravel步履蹒跚的跑完了测试。结果是有些出人意料的,不过上述的测试只代表了开发环境,下面会对框架进行优化,模拟线上环境。
优化框架
ThinkPHP:
APP_DEBUG改为false
Laravel:
APP_DEBUG改为false phpartisanroute:cache phpartisanoptimize phpartisanconfig:cache composerdumpautoload-o
Yii:
YII_DEBUG改为false
composerdumpautoload-o
并发200循环10次:
ThinkPHP
Transactions:1655hits Availability:82.75% Elapsedtime:8.21secs Datatransferred:173.62MB Responsetime:0.69secs Transactionrate:201.58trans/sec Throughput:21.15MB/sec Concurrency:139.29 Successfultransactions:1655 Failedtransactions:345 Longesttransaction:7.83 Shortesttransaction:0.00
Laravel:
Transactions:1520hits Availability:76.00% Elapsedtime:34.95secs Datatransferred:159.45MB Responsetime:3.15secs Transactionrate:43.49trans/sec Throughput:4.56MB/sec Concurrency:136.84 Successfultransactions:1520 Failedtransactions:480 Longesttransaction:19.18 Shortesttransaction:0.00
Yii:
Transactions:1704hits Availability:85.20% Elapsedtime:15.16secs Datatransferred:178.76MB Responsetime:1.46secs Transactionrate:112.40trans/sec Throughput:11.79MB/sec Concurrency:164.21 Successfultransactions:1704 Failedtransactions:296 Longesttransaction:9.04 Shortesttransaction:0.00
比较奇怪的一点,当框架关掉调试模式后都出现了较多失败的情况。不过明显的看到,Laravel进行简单的优化后,性能大大的提升了,但还是低于其他两个框架。
结论
在测试的过程中,其他我的心情是沮丧的,感觉自己的三观世界已经崩塌了,崩塌至渣。
ThinkPHP的性能比Yii高出一倍,比Laravel高出近四倍
Yii的性能比较中庸,但是在测试中会明显发现请求失败的情况比其他两个框架要少
Laravel依旧优雅,不过性能堪忧,用网友的话形容比较好学之者生用之者死
最后
我的项目最后使用了自建框架进行开发,得益于composer的强大,开发的过程非常顺利,最后附上自有框架在200并发10次循环的数据,框架开源但是更新比较忙,欢迎在github上搜索PPPHP,和我一起搭建框架。
Transactions:1672hits Availability:83.60% Elapsedtime:6.18secs Datatransferred:175.40MB Responsetime:0.57secs Transactionrate:270.55trans/sec Throughput:28.38MB/sec Concurrency:153.16 Successfultransactions:1672 Failedtransactions:328 Longesttransaction:4.57 Shortesttransaction:0.01