关闭

Web框架比拼测评

552人阅读 评论(0) 收藏 举报

Web框架比拼测评

作者:Seth Davis

欢迎来到web框架比拼现场。你在这里可以看到现在最流行最常用的免费开源web框架的测试代码和基准测试性能对比结果。

Web框架为什么需要比拼?

众多Web框架的版本号飙升,已经成为了一到靓丽的风景线,我很想知道不同的框架以及不同版本间的性能差别。

从2009年9月起,我开始在博客上分多次发布一些测试结果。 第4次发布后,我觉得是时候合并统计所有的测试了(已更新),在此奉上。

“这些测评结果有价值么?”

可能没有价值。

涉及到编码,极小的改动调整也会带来极大的变化。我曾试着公平准确地执行每次测试,但以任何学术态度对待结果都将是愚蠢的。另外,需要指出,我的目标并不是要找到每个框架最优配置后到底多快(如果默认配置允许,内置缓存和其他性能调优通常已开启),而是想看看一个最小化“开箱即用”的体验。

此外,没有一种web技术会看起来比另一种好。当涉及到使用工具进行工作时,“快”并不一定意味着“更好”。(极少数的真实项目才需要依赖单页的请求速度)

测评索引

每个框架都运行3个基本测试。以下是每个测试由高到低的每秒请求数的结果(越高越好)

Full-stack式:Pyramid, Django, TurboGears,Rails

注:Pyramid/Django使用SQLAlchemy作为ORM,使用Jinja2作为模版引擎

微框架:Bottle, Flask, Sinatra,Go

注:Web.go 在自带服务器中进行测试。另外,我对C语言非常生疏,只是随便了解了一下Go, 所以web.go没有进行数据库测试。(如果有人可以给Web.go添加一个SQLite的测试,我将非常感激。)

PHP框架:CakePHP, Kohana, CodeIgniter, Symfony, Yii

注:

  • 没错,APC缓存已开启(参见测试配置)
  • 众所周知,很多PHP框架与SQLite3兼容不是很好,为了让测试跑起来,做了一些必要的hack

所有框架横向测试

因为框架之间的差异,其实横向比较框架的测试并不是很“公平”。编译语言(比如Go)会比动态语言快。使用了ORM的(比如 Rails, Django,Pyramid等) 会比使用了普通DB库的(比如Bottle,Flask,Sinatra等)要慢。

“hello World”字符串测试

Framework Reqs/sec
web.go (Go r59) 3346
Pyramid 1.2 3026
Bottle 0.9.6 2825
Django 1.3.1 2159
Flask 0.7.2 2054
Sinatra 1.2.6 1583
CodeIgniter 2.0.3 929
TG 2.1.2 839
Yii 1.1.8 726
Kohana 3.2.0 714
Rails 3.1 711
Symfony 2.0.1 273
CakePHP 1.3.11 254


“hello World”模版测试

Framework Reqs/sec
Bottle 0.9.6 2417
web.go (Go r59) 1959
Flask 0.7.2 1918
Pyramid 1.2 1650
Sinatra 1.2.6 1329
Django 1.3.1 1005
CodeIgniter 2.0.3 884
Kohana 3.2.0 675
TG 2.1.2 663
Rails 3.1 625
Yii 1.1.8 548
CakePHP 1.3.11 203
Symfony 2.0.1 171


“Hello World”数据库查询+模版测试

Framework Reqs/sec
Bottle 0.9.6 1562
Flask 0.7.2 1191
Sinatra 1.2.6 982
web.go (Go r59) 741
Pyramid 1.2 555
CodeIgniter 2.0.3 542
Django 1.3.1 465
Rails 3.1 463
Kohana 3.2.0 423
TG 2.1.2 298
Yii 1.1.8 201
CakePHP 1.3.11 193
Symfony 2.0.1 113


测试环境配置信息以及测试源代码

所有测试均在Amazon EC2进行,配置如下:

  • EC2实例:ami-fbbf7892 m1.large ubuntu-images-us/ubuntu-lucid-10.04-amd64-server- 20110719.manifest.xml
  • Amazon的主机简介:7.5GB内存, 4个EC2 计算单元,850G空间,64位平台
  • Apache 2.2.14(我知道还有其他选择,考虑到Apache的市场占有率,我觉得它是一个不错的基线)
  • 基于Python的测试:Python 2.6.5 + mod_wsgi 2.8 (内嵌模式) 
  • 基于Ruby的测试:Ruby 1.9.2p290 + Phusion Passenger 3.0.9
  • 基于PHP的测试:PHP 5.3.2 (开启APC缓存)

关于每个框架的三种测试:

  • “hello World”字符串测试:本测试只是简单的字符串输出,没有模版或数据库调用,所以应该是最低级别的测试。
  • “hello World" 模版测试:本测试通过模版输出Lorem Ipsum(一篇拉丁文文章)(以此可以测试框架的模版引擎)
  • "Hello World"数据库查询 + 模版测试:本测试从SQLITE数据库中读取5行拉丁文(通过默认ORM或者sqlite3驱动),然后通过模版输出。(以此可以测试框架的ORM/DB驱动,还有模版引擎)
每个框架的所有测试文件可以在GitHub下载
 

以后的更新

新的框架发布后,我会尽力保证更新数据,不过可能会等到一些框架的主版本更新发布之后。可以在Google+上关注我或者关注我的GitHub

关于测评的重要声明和其他详细信息,请参见:The Great Web Framework Shootout's website。如果你有任何疑问或评论,请在google+上联系我

 

原文参见:http://blog.curiasolutions.com/the-great-web-framework-shootout/

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:988487次
    • 积分:13800
    • 等级:
    • 排名:第903名
    • 原创:332篇
    • 转载:403篇
    • 译文:27篇
    • 评论:42条
    新浪微博 @billfeller