注(1):本次测试仅使用ab测试框架的路由性能,并不包含框架提供的DB操作(ORM等)、渲染视图等方面的性能。
注(2):环境软件与框架均使用最新稳定版,设置为生产环境(关闭debug和trace功能)。
注(3):我分别在开启PHP5.5自带的Opcache前后两次测试,灰色表示未开启,蓝色表示开启。
硬件环境:Intel i5-4570单核@3.20GHz、1G内存
软件环境:CentOS 6.5、Tengine 1.5.2、PHP 5.5.11
框架版本:Laravel 4.1.24、Yii 1.1.14、Yii2(Beta)、ThinkPHP 3.2.1、Yaf 2.2.9、原生PHP。
测试参数:ab -n1000 -c50
下列图表是测试结果中Requests per secend的柱状图,详细(越大越好)
个人看法:
Opcache对各个框架产品都有很大的性能加成,尤其Yii 1在使用之后可以超越ThinkPHP。(另外根据Yii文档所示,可以替换加载yiilite.php配合APC提升性能。但测试后发现对PHP5.5的Opcache无效,所以依然使用默认的yii.php)
Yii虽然比ThinkPHP臃肿很多(20M vs 3M),但归功于Yii的lazyload机制,在加载框架和路由托管上都不逊于ThinkPHP。而且在渲染视图方面,Yii 1使用PHP原生语言+少量widget模式,性能上应该也比ThinkPHP要好(猜测、未测试)。
Laravel可以说是去年最热门的PHP框架之一,其优雅的编码风格让代码变得简洁明确,丰富的路由和强大的ORM都节省了程序员很大的功夫。但从本次测试可以看出,实现代价也是巨大的。使用xhprof可以看到,【进入默认控制器】这一流程Laravel需要加载3700个的方法,Yii只需要490。当然Laravel还可以通过修改autoloader方式optimze,但效果也比yii差很多。
Laravel虽然在路由性能上输给了其他框架很多,但并不影响我对它的热情。这也仅能证明Laravel不适合Web-service模式且强调高性能的需求。而对于full-stack的web开发,肯定会用到DB操作,此时Laravel和Yii相差不多。Yii作为full-stack框架的耦合性太强,入了Yii的坑,使用其他的扩展组件都需要按照Yii的规范重新封装,相当麻烦。而Laravel和Yii 2都使用composer作为组件源,对于习惯包管理的开发者能够很快的使用一些现成组件搭建自己的网站。
本文仅在满足个人的尝鲜欲:Laravel实现的IOC,Yii 2大量使用PHP 5.4新特性以及Yaf c模块扩展的实现方式,都是我之前工作里很少能遇到的。至于测试本身,可能遗漏了其他常用的PHP框架,如CI、Zend等,各位看官了解一下就好,如果有什么意见和不同见解,希望多多和我讨论。
After Yaf, there comes another PHP framework in extension(在Yaf发布以后, 又出现了一个PHP扩展的框架 Phalcon): Phalcon.
then there raise a problem, which people have asked multi-times to me, that is , which one is the *fastest*(于是就出现一个问题, 不停的有人问, 到底Yaf和Phalcon哪个快, 因为他们都在他们的主页上宣称是最快的框架)? Yaf, or Phalcon. as they both declared they are the fastest(Yaf, Phalcon)
So I did a simple benchmark(所以我做了个简单的测试), the benchmark scripts is provide by Ruilog, and could be found at: benchmark scripts
ab -n 30000 -c 100
Bechmark
More details:
the result is clear, right?
thanks