Web框架为什么需要比拼? 众多Web框架得版本号飙升,已经成为了一到靓丽得风景线,我很想知道不同得框架以及不同版本间得性能差别。从2009年9月起,我开始在博客上分多次发布一些测试结果。 第4次发布后,我觉的是时候合并统计所有得测试了(已更新),在此奉上。 “这些
Web框架为什么需要比拼?
众多Web框架得版本号飙升,已经成为了一到靓丽得风景线,我很想知道不同得框架以及不同版本间得性能差别。从2009年9月起,我开始在博客上分多次发布一些测试结果。 第4次发布后,我觉的是时候合并统计所有得测试了(已更新),在此奉上。
“这些测评结果有价值拇?” 可能没有价值。
涉及到编码,极小得改动调整也会带来极大得变化。我曾试着公平准确地执行每次测试,但以任何学术态度对待结果都将是愚蠢得。另外,需要指出,我得目
标并不是要找到每个框架最优配置后到底多快(如果默认配置允许,内置缓存和其他性能调优通常已开启),而是想看看一个最小化“开箱即用”得体验。
此外,没有一种web技术会看起来比另一种好。当涉及到使用工具进行工作时,“快”并不一定意味着“更好”。(极少数得真实项目才需要依赖单页得请求速度)
测评索引 - Full-stack式:Pyramid, Django, TurboGears,Rails
- 微框架:Bottle, Flask, 新浪tra,Go
- PHP框架:CakePHP, Kohana, CodeIgniter, Symfony, Yii
- 所有框架横向测试
- 测试环境配置信息以及测试源代码
每个框架都运行3个基本测试。以下是每个测试由高到低得每秒请求数得结果(越高越好)
Full-stack式:Pyramid, Django, TurboGears,Rails 注:Pyramid/Django使用SQLAlchemy作为ORM,使用Jinja2作为模版引擎
微框架:Bottle, Flask, 新浪tra,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,新浪tra等)要慢。
“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 |
新浪tra 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 |
新浪tra 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 |
新浪tra 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 |