主流PHP框架性能非权威测试

作为一个PHP开发者,而且是初创企业团队的技术开发者,选择开发框架是个很艰难的事情。

用ThinkPHP的话,招聘一个刚从培训机构出来的开发者就可以上手了,但是性能和后期代码解耦是个让人头疼的事情。不过很多第三方功能不需要自己写,众多大牛已经给铺好路了。

用Laravel的话,传说写起来很爽扩展性也够,但是学习成本有点高,总不能给初级开发者半个月的时间去学习框架吧。而且据说江湖人士透漏,Laravel性能不怎么样,文档也并不是特别丰富。

用Yii的话,语法有点啰嗦,前后端代码分离有点小麻烦,不过性能是非常好的,而且已经有众多国内大公司在使用了,出现意外可以快速的找到大牛答疑解惑。

不如做个简单的性能评测,选个性能出色的总不会出错

性能测试

测试时间: 2016年05月06日
测试工具: siege (因为MAC系统的ab总是会出现 pr_socket_recv: Connection reset by peer (54) 的错误,所以选择了siege)
测试机器: MacPro Core i5 处理器/8GB内存/256GB SSD闪存
测试环境: Apache PHP5.6
框架版本: ThinkPHP 3.2.3 Laravel 5.2 Yii2.0.5
测试原则: 每次测试循环5次,取中等数据
补充说明:所有项目都是让在子目录中

结果说明

Transactions: 2119 hits 处理请求总数量
Availability: 96.85 % 可用性
Elapsed time: 9.74 secs 运行时间
Data transferred: 1.31 MB 数据传输量
Response time: 0.60 secs 响应时间
Transaction rate: 217.56 trans/sec 每秒处理效率
Throughput: 0.13 MB/sec 每秒处理数据
Concurrency: 130.28 并发
Successful transactions: 2162 成功的请求
Failed transactions: 69 失败的请求
Longest transaction: 2.85 最长的单个请求
Shortest transaction: 0.01 最短的单个请求
开始测试

增加一个控制器,并在控制器中输入10000次HelloWorld

并发50循环10次:

首先向我们走来的是ThinkPHP,看上去还行

Transactions: 500 hits
Availability: 100.00 %
Elapsed time: 2.81 secs
Data transferred: 52.45 MB
Response time: 0.26 secs
Transaction rate: 177.94 trans/sec
Throughput: 18.67 MB/sec
Concurrency: 47.10
Successful transactions: 500
Failed transactions: 0
Longest transaction: 0.48
Shortest transaction: 0.03
然后是Laravle,嗯,略微有些失望

Transactions: 500 hits
Availability: 100.00 %
Elapsed time: 13.33 secs
Data transferred: 52.45 MB
Response time: 1.27 secs
Transaction rate: 37.51 trans/sec
Throughput: 3.93 MB/sec
Concurrency: 47.55
Successful transactions: 500
Failed transactions: 0
Longest transaction: 3.64
Shortest transaction: 0.07
最后赛前比较看好的Yii

Transactions: 500 hits
Availability: 100.00 %
Elapsed time: 4.84 secs
Data transferred: 52.45 MB
Response time: 0.46 secs
Transaction rate: 103.31 trans/sec
Throughput: 10.84 MB/sec
Concurrency: 47.65
Successful transactions: 500
Failed transactions: 0
Longest transaction: 0.88
Shortest transaction: 0.04
并发200循环10次:

首先是ThinkPHP

Transactions: 1977 hits
Availability: 98.85 %
Elapsed time: 10.03 secs
Data transferred: 207.40 MB
Response time: 0.95 secs
Transaction rate: 197.11 trans/sec
Throughput: 20.68 MB/sec
Concurrency: 187.68
Successful transactions: 1977
Failed transactions: 23
Longest transaction: 1.22
Shortest transaction: 0.02
然后是Laravel

Transactions: 1890 hits
Availability: 94.50 %
Elapsed time: 51.85 secs
Data transferred: 198.27 MB
Response time: 4.88 secs
Transaction rate: 36.45 trans/sec
Throughput: 3.82 MB/sec
Concurrency: 178.00
Successful transactions: 1890
Failed transactions: 110
Longest transaction: 26.01
Shortest transaction: 0.07
最后是Yii

Transactions: 1996 hits
Availability: 99.80 %
Elapsed time: 18.95 secs
Data transferred: 209.39 MB
Response time: 1.79 secs
Transaction rate: 105.33 trans/sec
Throughput: 11.05 MB/sec
Concurrency: 188.57
Successful transactions: 1996
Failed transactions: 4
Longest transaction: 3.29
Shortest transaction: 0.10
没想到在没有优化的情况下,ThinkPHP的速度是最快的,Yii略微多一些,Laravel步履蹒跚的跑完了测试。结果是有些出人意料的,不过上述的测试只代表了开发环境,下面会对框架进行优化,模拟线上环境。

优化框架

ThinkPHP:

APP_DEBUG改为false
Laravel:

APP_DEBUG改为false
php artisan route:cache
php artisan optimize
php artisan config:cache
composer dumpautoload -o
Yii:

YII_DEBUG改为false
composer dumpautoload -o
并发200循环10次:
ThinkPHP

Transactions: 1655 hits
Availability: 82.75 %
Elapsed time: 8.21 secs
Data transferred: 173.62 MB
Response time: 0.69 secs
Transaction rate: 201.58 trans/sec
Throughput: 21.15 MB/sec
Concurrency: 139.29
Successful transactions: 1655
Failed transactions: 345
Longest transaction: 7.83
Shortest transaction: 0.00
Laravel:

Transactions: 1520 hits
Availability: 76.00 %
Elapsed time: 34.95 secs
Data transferred: 159.45 MB
Response time: 3.15 secs
Transaction rate: 43.49 trans/sec
Throughput: 4.56 MB/sec
Concurrency: 136.84
Successful transactions: 1520
Failed transactions: 480
Longest transaction: 19.18
Shortest transaction: 0.00
Yii:

Transactions: 1704 hits
Availability: 85.20 %
Elapsed time: 15.16 secs
Data transferred: 178.76 MB
Response time: 1.46 secs
Transaction rate: 112.40 trans/sec
Throughput: 11.79 MB/sec
Concurrency: 164.21
Successful transactions: 1704
Failed transactions: 296
Longest transaction: 9.04
Shortest transaction: 0.00
比较奇怪的一点,当框架关掉调试模式后都出现了较多失败的情况。不过明显的看到,Laravel进行简单的优化后,性能大大的提升了,但还是低于其他两个框架。
结论

在测试的过程中,其他我的心情是沮丧的,感觉自己的三观世界已经崩塌了,崩塌至渣。

ThinkPHP的性能比Yii高出一倍,比Laravel高出近四倍
Yii的性能比较中庸,但是在测试中会明显发现请求失败的情况比其他两个框架要少
Laravel依旧优雅,不过性能堪忧,用网友的话形容比较好 学之者生用之者死

最新文章

  1. weex scroller
  2. 链接(extern、static关键词\头文件\静态库\共享库)
  3. 读取SD卡文件夹下的MP3文件和播放MP3文件
  4. android studio 项目迁移编码问题
  5. Socket编程注意接收缓冲区大小
  6. php---文件上传分析
  7. 关于如何使用Navicat(11.1.13) for MySQL如何创建存储过程
  8. Java最重要的21个技术点和知识点之JAVA面向对象
  9. 亦步亦趋在CentOS 6.4下安装Oracle 11gR2(x64)
  10. 易汇金在线支付接口实例。ecshop和shopex,shopnc,iwebshop下完美无错(最新)
  11. v-cloak 实现vue实例未编译完前不显示
  12. C# linq创建嵌套组
  13. Type '' cannot conform to protocol '' because it has requirements that cannot be satisfied
  14. 本机不安装Oracle客户端,使用PL/SQL Developer和 Instant Client 工具包连接oracle 11g远程数据库
  15. .net OADate 转javascript的Datetime js 5位 日期 转换
  16. android-音量管理
  17. Hibernate 再接触 一级缓存 二级缓存 查询缓存
  18. 如何完全卸载oracle和删除oracle在注册表中的注册信息
  19. linux shell脚本之-变量极速入门与进阶(1)
  20. 【Java初探02】——Java语言基础

热门文章

  1. 【VS开发】CListBox智能滚动设置
  2. vue加scoped后无法修改样式(无法修改element UI 样式)
  3. 论文阅读 | ERNIE: Enhanced Representation through Knowledge Integration
  4. createjs小游戏开发总结
  5. 一次JDBC支持表情存储的配置过程
  6. (补发)学pythion的第二天
  7. 【Python】【demo实验20】【练习实例】【寻找“完数”】
  8. 【转帖】Office的光荣历史(1)
  9. 什么是阿里云ACA认证
  10. MySQL-存储引擎-创建表-字段数据类型-严格模式-字段约束-键-02