Yii 是一个高性能框架。下面的图表显示了与其它流行的 PHP 框架相比 Yii 是如何高效。在图表中,RPS 表示“每秒请求”,它描述了在框架中写入的应用程序每秒可以处理的请求数。数值越大,这个框架的效率就越高。我们可以看到,在此比较中 Yii 胜过所有其它框架。当启用广泛使用的 APC 扩展时,Yii 的性能尤为显著。

单靠性能并不是个完整的故事(否则我们应该使用纯 HTML 或 PHP)。拥有如此优越的性能,Yii 还提供了非常丰富的 功能集,可以大大提高您的开发效率。

Performance Comparison Among PHP Frameworks

为什么Yii如此之快

Yii 如此之快是因为它广泛地使用延迟加载技术。例如,它不会包含一个类文件,直到该类第一次使用;并且在第一次访问一个对象之前它不会创建这个对象。其它框架遭受的性能折扣,是因为无论是否在请使用或请求期间,它们都会启动这个功能(例如,数据库连接,用户会话)。

基准设置

下面我们解释我们如何设计基准应用程序并获得上述的 RPS 数值。

基准应用程序

由于我们的目标是比较每个框架的最小开销,每个框架的基准测试应用程序应该是最简单的。我们选择通过在每个应用程序的默认动作中放置一个 echo 语句来显示一个“Hello World”文本字符串。 禁用任何额外的框架特征(例如会话)以确保比较的公平性。 要获得基准测试应用程序的副本,请查看 phpmark项目

为什么用“Hello World”

我们选择做“Hello World”测试主要是为了实现我们的目标,即找出每个框架的最小开销。许多人抱怨“Hello World”应用程序是无意义的,因为现实的应用程序通常需要处理更复杂的任务,例如数据库查询。这是很真实的。实际上,特别是在大型 Web 2.0 应用程序中,我们经常遇到非常接近“Hello World”的场景。例如,应用程序可能需要响应返回当前服务器时间戳的 AJAX 请求;页面具有其缓存的内容的大部分,并且应用程序只需要提取缓存的内容并显示它。

“Hello World”的另一个原因是当涉及更复杂的特征(例如数据库查询)时,确保比较是公平的,这是一个非常困难的任务。例如,一个框架在执行数据库查询时可能非常有效,但它缺少缓存方案;而另一个框架在数据库查询时有点慢,但它有复杂的缓存功能,以帮助缓解性能影响。总而言之参与公平比较的因素太多。

基准工具和环境

用 ApacheBench 工具的指令“ab –t 30 -c 10 URL”来获取 RPS 的数值(如:在并发级数 10 运行测试 30 秒)。为了获得每个框架的数值,我们先停止再启动 Apache WEB 服务器来避免干扰。还要运行测试程序几次来“预热”测试环境。在 phpmark project 中,有个叫 benchmark.sh 的 shell script 使基准程序自动化。

以下是测试环境:

APC ini 设置如下:

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