ThinkPHP胜出Laravel 近4倍,主流框架性能测试
主流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依旧优雅,不过性能堪忧,用网友的话形容比较好 学之者生用之者死
ThinkPHP胜出Laravel 近4倍,主流框架性能测试的更多相关文章
- AMD全新32核线程撕裂者GeekBench跑分曝光:超2950X近一倍
AMD全新32核线程撕裂者GeekBench跑分曝光:超2950X近一倍 2019年09月01日 09:36 1109 次阅读 稿源:快科技 1 条评论 https://www.cnbeta.com/ ...
- 滴滴与Uber都盯上拉美市场!一场惨烈竞争谁能胜出?
创业者最怕的是什么?或许并不是在创业初期的艰难历程.毕竟在初期虽然会遇到很多磨难和众多竞争对手,但只要敢打敢拼就有胜出的可能.创业者最怕的或许是成为所属行业独角兽后,要面对势均力敌对手的凶猛攻击!大家 ...
- 我是如何将一个老系统的kafka消费者服务的性能提升近百倍的
☞☞☞ 我是如何将一个老系统的kafka消费者服务的性能提升近百倍的 ☜☜☜ ○○○○○○○○○○○○○○○ 大家好,又见面了~ kafka作为一种高吞吐量的分布式发布订阅消息系统,在业务系统中被广泛 ...
- 遭遇AutoMapper性能问题:映射200条数据比100条慢了近千倍
今天遇到了AutoMapper的一个性能问题,使用的是AutoMapper的Project特性,AutoMapper版本是3.3.0,代码如下: return await _repository .G ...
- 世界围棋人机大战、顶峰对决第二战:围棋世界冠军Lee Sedol(李世石,围棋职业九段)对战Google DeepMind AlphaGo围棋程序,AlphaGo再次胜出!
感觉在哔哩哔哩(bilibili)上看比赛直播比较好,一直可以看到比赛的直播画面,还能听到英文解说和中文主持人的解说.YouTube上是不错,但是一方面爬梯子比较卡,另一方面只能听到英文解说. 韩国著 ...
- C#中使用泛型对照使用通用基础类型效率减少近一倍
C#中使用泛型对照使用通用基础类型效率减少近一倍 以下是測试结果: CSharp class and generic TotalMilliseconds: 270772.9229CSharp g ...
- Python和Java的语法对比,语法简洁上python的确完美胜出
Python是一种广泛使用的解释型.高级编程.通用型编程语言,由吉多·范罗苏姆创造,第一版发布于1991年.可以视之为一种改良(加入一些其他编程语言的优点,如面向对象)的LISP.Python的设计哲 ...
- 人工智能范畴及深度学习主流框架,IBM Watson认知计算领域IntelligentBehavior介绍
人工智能范畴及深度学习主流框架,IBM Watson认知计算领域IntelligentBehavior介绍 工业机器人,家用机器人这些只是人工智能的一个细分应用而已.图像识别,语音识别,推荐算法,NL ...
- 人工智能范畴及深度学习主流框架,谷歌 TensorFlow,IBM Watson认知计算领域IntelligentBehavior介绍
人工智能范畴及深度学习主流框架,谷歌 TensorFlow,IBM Watson认知计算领域IntelligentBehavior介绍 ================================ ...
随机推荐
- Spring MVCD框架中调用HanLP分词的方法
项目简要:关于java web的一个项目,用的Spring MVCd 框架.鉴于参与此次项目的人中并不是所人都做的Spring,为了能够提高效率,建议大家是先抛开SPring来写自己负责的模块,最后再 ...
- linux下vi编辑器常用命令
最近折腾云主机centOS,不得不接触到各种命令,特别是vi编辑器. 时常悔恨当时没好好听金老伯的linux课,导致现在操作命令用的十分生疏,甚至跳转行首行尾都要查一查才知道. 所以〒▽〒有了下面这篇 ...
- Mathematically Hard LightOJ-1007(欧拉定理+前缀和)
Description Mathematically some problems look hard. But with the help of the computer, some problems ...
- tensorflow零起点快速入门(5) --强化学习摘录截图
tf.random_normal_initializer tf的GraphKeys用法 tf.reduce_mean tf.squared_difference 非tf中的zip,python的zip ...
- 【IntelliJ IDEA】tomcat启动,打印日志乱码问题 【最新解决方法请看最后附录】
刚开始给idea上配置了一个tomcat,然后跟着http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/theme-settings.h ...
- 【POI】使用POI 创建生成XLS,打开xls文件提示【此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数。】
使用POI 创建生成XLS,打开xls文件提示[此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数.] 原因: 是因为在POI处理xls的过程中,太多次调用了: HSSFFont fon ...
- Windows authentication for WCF web services error
WCF Web服务的Windows身份验证在部署到IIS时,默认网站添加应用程序的方式.浏览运行.svc文件报错. 错误代码: The authentication schemes configure ...
- Java object-oriented8/5
package Chapter1.Class;/** * 制作一个简单的通讯录.. * @author LENOVO * */public class ClassDemo_01 { String na ...
- Qt 中使用Java代码获取安卓设备的MAC地址(安卓9.0)
public String GetDeviceMAC() { String strMacAddr = null; try { // 获得IpD地址 InetAddress ip = getLocalI ...
- JS基础_for循环练习1
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...