我始终信任PHP, 信心来自于某朋友千万级用户的WEB系统的成功应用(主语言是PHP,主平台为某开源Framework)。
陆陆续续使用过一些php框架:Zend, CakePhp, Yii, Symfony. 着实大大提高了开发效率(不是运行效率)。但是web应用的性能考虑尤不可轻视。那还是在08年完成一个CakePHP项目之后,才知道很多人诟病于CakePHP效率低下,当初我也参考了Yii性能报告 原文地址:
http://www.yiiframework.com/performance
CakePHP如此惨不忍睹:),Yii遥遥领先? 如此这般,Yii都可以支持百万用户级了?
是否有失偏颇,我决定还是自己亲手测试一下Cakephp, Yii两者之间的性能差异。测试环境:
CentOS5.2 + Apache(Module PHP) + PHP5.2.10(未开启APC) + Mysql 5.0.45
为消除网络影响,所有测试都是在本机运行,测试结果如下:
Hello World测试,和Yii网站的测试结果相似,甚至,CakePHP的rps更低(23.21), CakePHP作者辩称Framework伸缩性更重要,测试时的公正性要求太多的参数,比如要关闭debug模式等等,我也一一调节这些参数,但对于Hello World程序几乎没有影响。
不过大家知道Cakephp框架的特性是:一旦装载页面,数据库就要求连接, 而Yii绝不,它采用Lazy Mode,按需加载。所以,比Hello World是不是有失公允?(至于哪种模式更好是另外的话题,显而易见)因此,上面才有了select data from db的性能比较: 建立用户表,仅有两条数据。一条select语句。结果显示(仍然上图): Yii/Cake = 23.21/11.51rps
小小的谎言被揭穿了:) 尽管是Cakephp的两倍,Yii每秒完成并发仍然只有20几个,远远不能自然支持日百万级系统。所以半斤八两,不是吗?(注意哦,APC没开)
我说么,当初做Yii的应用时也没觉得快多少嘛. 我记得哪次采访某公司技术总监来着,请问:用PHP的伸缩性是否存在问题?
他回答:
语言不伸缩,架构伸缩。
实际上,如果使用php开发号称或者想支持百万级用户的web系统,绝不是单纯采用某种框架
、甚至单一语言就能完美构造的,他们往往是以某种web framework为主平台、仔细设计数据结构、缓存技术、混合使用直接php/html、java(如消息系统)等才得以让系统奔跑起来。
而对于纯动态网站(甚至不做缓存),Yii和CakePHP,由于易用性不相上下,这时我才更多参考上面的性能测试,我选择用Yii.
请捐我一文钱,支持我的博客,点击我的阿里妈妈