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