使用Web开发框架,可以帮助开发者提高Web应用程序、Web服务和网站等Web开发工作的质量和效率。本文主要是对当今流行的Web框架进行比较,通过对比,你将会看到我们经常使用的在F/OSS(开放源代码软件)下Web流行框架的测试结果。
测试的结果有价值吗?
或许没有价值,当涉及到代码,也许就能凸显出它的价值所在。我尽可能的试着将每一个测试做到公平、准确。或许考虑测试结果的科学性,这种想法是愚蠢的。本文的目的并非一定要弄清楚每个框架是如何进行快速的最佳优化配置(在默认允许的情况下,内置缓存和其他性能调整通常被启用),而是更加倾向于分享经验。
此外,无非是想让Web开发发展的更好。但是,当使用适合的工具工作时,“快”并不一定意味着“更好”(极少数world项目单靠页面请求速度)。
一、Full stack(ish):Pyramid, Django, TurboGears, and Rails
注:Pyramid/TG程序使用SQLAlchemy测试类似ORM和Jinja2的模板测试系统。
二、Microframeworks:Bottle, Flask, Sinatra, and web.go
注:web.go测试运行在自身内置的服务器上,C语言对我而言较为生疏,我只熟悉GO语言。因此,如果某人能在web.go应用测试中添加SQLite,我会非常感激。
三、PHP框架: CakePHP, Kohana, CodeIgniter, Symfony, and Yii
注意:APC被启用(见“test setup”环节),很显然,大多数PHP框架使用SQLite3存在很多问题,在某种情况下,黑客需要数据库方面的测试运行结果。
四、所有框架单独对比情况:
把所有的框架测试单独进行对比并不是真正的“公平”,因为,他们各自都有不同点。编译语言(比如GO)要比脚本语言快;使用ORM(比如Rails, Django, Pyramid等)测试要比纯数据库(比如Bottle, Flask, Sinatra等)要慢。
测试配置:
采用亚马逊的EC2云平台,安装Ubuntu Server步骤:
- The EC2 instance used was: ami-fbbf7892 m1.large ubuntu-images-us/ubuntu-lucid-10.04-amd64-server-20110719.manifest.xml
- As a “Large” instance, Amazon describes the resources as: 7.5 GB of memory, 4 EC2 Compute Units (2 virtual cores with 2 EC2 Compute Units each), 850 GB of local instance storage, 64-bit platform.
- Apache 2.2.14 was used. (Yes, I know there are other options, but with Apache’s market share I figured it would be a good baseline.)
- Python 2.6.5 and mod_wsgi 2.8 (embedded mode) were used for the Python based tests.
- Ruby 1.9.2p290 and Phusion Passenger 3.0.9 were used for the Ruby based tests (Ruby 1.8.x is slow).
- PHP 5.3.2 (with APC enabled) was used for the PHP based tests.
- ApacheBench was run locally with -n 10000 and -c 10 about 5-10 times each, and the “best guess average” was chosen.
设定每个框架可运行的三个基本测试结果:
- “Hello World”测试:该测试只输出一个字符串响应。没有模板或数据库调用,因此进程水平最少。
- Template测试:该测试输出Lorem Ipsum和一个template(框架模板系统)
- Template/DB测试:Lorem Ipsum从SQLite DB(ORM或sqlite3驱动程序)中加载5行,通过template输出(ORM/DB驱动程序和template系统)。
你可以通过GitHub下载测试应用程序。
你想为测试结果添加XYZ吗?
只需在GitHub提交测试程序代码即可。当然,我会不断更新新的框架版本,你可以随时关注Google+或者GitHub。(夏梦竹/编译)
评论