技术开发 频道

Web流行框架一决高下:"快"不一定"好"

        【IT168 技术】使用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。(夏梦竹/编译)

  精彩评论:

  enneff :

  Go的成绩很好是有一些原因的。

  首先测试用的版本很老(r59),现在最新版本是r60。最近大部分Go用户比较关注Go 1。

  其次,更重要的是他们示范了web.go和mustache.go库。在GO(2009年年底或2010年初)发布不久后,第三方库被编译,从那时起,GO标准的http和template得到了大力发展。

  第三,这里有一个新的"database/sql"包提供单一的SQL数据库接口,还有几个驱动程序,包括sqlite,因此,在Go语言基准测试中很容易执行部分数据库。

  鉴于框架的基准测试任务,我想这就是作者进行框架对比的原因。幸运的是对于Go程序员来说,Go项目中的http、templates和databases在标准库中被称为代码的核心功能。

  powertower :

  “Hello World”测试将被并发工作所取代,比如用户访问、编译达到100s的请求数,

  我记得有个测试是将MySQL与SQL Server(Microsoft's SQL Server)进行对比,还是几年的事情了。一个用户用MySQL击败了SQL Server 。所有人都为之惊叹,究竟MySQL如何优于SQL Server。

  j45 :

  有趣的对比,很喜欢这个特别的测试,我们可以在这里发表自己的看法并进行讨论。

  比如:是否真的有一个框架适合所有应用?

  我们都知道过早的优化不适合开发,重要的是有人使用过吗?

0
相关文章