Yii Framework的性能

Yii是一个高性能的框架,下面图表显示Yii Framework和其它流行PHP框架的性能比较。在图表中,RPS表示“每秒请求数”,他描述使用不同的PHP框架写的一个应用程序的每秒处理请求数。数字越高表示框架越高效,性能越好。正如我们看到的,Yii Framework比其它框架比较性能要好。Yii性能要好于其它框架的一个重要因素是APC扩展。

性能本身并不全部(否则我们可以使用HTMLH或者PHP)。在优秀性能基础上,Yii同时提供了很多的功能、特性来提高我们的开发效率。

Yii为什么如此快

Yii如此快的一个重要原因是他使用了延时加载技术性。例如:他不包涵一个类文件,直接该类文件被首次使用时候才被包涵;他不创建一个对象直到这个对象首次必访问时候他才会必创建。其它框架慢的一个原因就是被包涵的功能过多(比如数据库连接,用户session),而每次请求中都用不到这些功能。

基准测试设置

下面我们解释我们是如何设计基准应用程序并获得RPS的数据

基准测试应用程序

由于我们的目标是测试每个框架最小的开销(minimal overhead),我们使用每个框架最简单的基准测试程序,我们使用每一个框架编写一个只输出“Hello Word”字符串的代码。禁止其它任何的功能(比如session)来确保我们的比较公平。该基准测试程序地址:phpmark project

为什么是“Hello Word”

我们选择使用“Hello Word”程序来达到我们的测试目标,即实现每个框架的最小开销(mininal overhead)。许多人抱怨“Hello Word”程序是没有意义的,因为现实世界的应用程序,往往需要更复杂的任务。这看起来不是那么真实,在现实中,尤其是一些Web 2.0应用程序,我们经常遇到和“Hello Word”非常接近的情况。例如:一个应用程序需要从AJAX请求中获取当前服务器的时间;一个页面的大部份内容必缓存,程序只需要从缓存中获取内容并显示即可。

另一个使用“Hello Word”的原因是,涉及更多的特性(比如数据库查询)是,他成为一个非常艰巨的任务。比如某个框架在执行数据库查询时非常有效,但他没有缓存功能,而另一个框架数据库查询有些慢,当他有先进的缓存功能。有太多的因素会影响性能测试的结果。

基准测试工作和环境

我们使用ApacheBench工具的”ab -t 30 -c 10 URL”命令来获得RPS数字。在获得每个框架的RPS数据之前,我们需要停止再开启Apache Web服务以避免干扰。我们也会先执行测试程序几次完成热身(warm up)。在phpmark project中,我们有一个benchmark.sh的shell脚本来完成自动化测试。

测试环境:

  • 操作系统:Red Hat Enterprise Linux Server release 5.2
  • Web服务器:Apache httpd 2.0.40
  • PHP:5.2.6, any non-essential extensions are disabled
  • CPU:Dual Intel Xeon 3.2GHz
  • 内存:2GB
  • 硬盘:73GB 15K RPM SCSI/SAS HDD

APC配置:

apc.enabled=1
apc.shm_segments=1
apc.optimization=0
apc.shm_size=32
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
apc.cache_by_default=1
apc.stat=0

Yii Framework框架

快速、安全、专业的PHP框架

Yii是一个高性能的PHP框架,非常适合开发Web 2.0应用程序。

Yii自带丰富的功能,包括:MVC(三层架构模式), DAO/ActiveRecord(面向对象的数据访问对象接口), I18N/L10N(国际化与本地化), caching(缓存), authentication(身份验证)和role-base access control(基于角色的访问控制), scaffolding(脚手架), testing(测试)等等,他可以加快您的开发速度。

Yii Framework官方网站:http://www.yiiframework.com/

Yii Framework权威指南:http://www.yiiframework.com/doc/guide/

Yii Framework中文权威指南:http://www.yiiframework.com/doc/guide/1.1/zh_cn/index