且看Web流行框架之戰(zhàn)
使用Web開發(fā)框架,可以幫助開發(fā)者提高Web應(yīng)用程序、Web服務(wù)和網(wǎng)站等Web開發(fā)工作的質(zhì)量和效率。本文主要是對(duì)當(dāng)今流行的Web框架進(jìn)行比較,通過對(duì)比,你將會(huì)看到我們經(jīng)常使用的在F/OSS(開放源代碼軟件)下Web流行框架的測(cè)試結(jié)果。
測(cè)試的結(jié)果有價(jià)值嗎?
或許沒有價(jià)值,當(dāng)涉及到代碼,也許就能凸顯出它的價(jià)值所在。我盡可能的試著將每一個(gè)測(cè)試做到公平、準(zhǔn)確。或許考慮測(cè)試結(jié)果的科學(xué)性,這種想法是愚蠢的。本文的目的并非一定要弄清楚每個(gè)框架是如何進(jìn)行快速的***優(yōu)化配置(在默認(rèn)允許的情況下,內(nèi)置緩存和其他性能調(diào)整通常被啟用),而是更加傾向于分享經(jīng)驗(yàn)。
此外,無非是想讓W(xué)eb開發(fā)發(fā)展的更好。但是,當(dāng)使用適合的工具工作時(shí),“快”并不一定意味著“更好”(極少數(shù)world項(xiàng)目單靠頁(yè)面請(qǐng)求速度)。
一、Full stack(ish):Pyramid, Django, TurboGears, and Rails
注:Pyramid/TG程序使用SQLAlchemy測(cè)試類似ORM和Jinja2的模板測(cè)試系統(tǒng)。
二、Microframeworks:Bottle, Flask, Sinatra, and web.go
注:web.go測(cè)試運(yùn)行在自身內(nèi)置的服務(wù)器上,C語(yǔ)言對(duì)我而言較為生疏,我只熟悉GO語(yǔ)言。因此,如果某人能在web.go應(yīng)用測(cè)試中添加SQLite,我會(huì)非常感激。
三、PHP框架: CakePHP, Kohana, CodeIgniter, Symfony, and Yii
注意:APC被啟用(見“test setup”環(huán)節(jié)),很顯然,大多數(shù)PHP框架使用SQLite3存在很多問題,在某種情況下,黑客需要數(shù)據(jù)庫(kù)方面的測(cè)試運(yùn)行結(jié)果。
四、所有框架單獨(dú)對(duì)比情況:
把所有的框架測(cè)試單獨(dú)進(jìn)行對(duì)比并不是真正的“公平”,因?yàn)椋麄兏髯远加胁煌c(diǎn)。編譯語(yǔ)言(比如GO)要比腳本語(yǔ)言快;使用ORM(比如Rails, Django, Pyramid等)測(cè)試要比純數(shù)據(jù)庫(kù)(比如Bottle, Flask, Sinatra等)要慢。
測(cè)試配置:
采用亞馬遜的EC2云平臺(tái),安裝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.
設(shè)定每個(gè)框架可運(yùn)行的三個(gè)基本測(cè)試結(jié)果:
“Hello World”測(cè)試:該測(cè)試只輸出一個(gè)字符串響應(yīng)。沒有模板或數(shù)據(jù)庫(kù)調(diào)用,因此進(jìn)程水平最少。
Template測(cè)試:該測(cè)試輸出Lorem Ipsum和一個(gè)template(框架模板系統(tǒng))
Template/DB測(cè)試:Lorem Ipsum從SQLite DB(ORM或sqlite3驅(qū)動(dòng)程序)中加載5行,通過template輸出(ORM/DB驅(qū)動(dòng)程序和template系統(tǒng))。
你可以通過GitHub下載測(cè)試應(yīng)用程序。
你想為測(cè)試結(jié)果添加XYZ嗎?
只需在GitHub提交測(cè)試程序代碼即可。當(dāng)然,我會(huì)不斷更新新的框架版本,你可以隨時(shí)關(guān)注Google+或者GitHub。
精彩評(píng)論:
enneff :
Go的成績(jī)很好是有一些原因的。
首先測(cè)試用的版本很老(r59),現(xiàn)在***版本是r60。最近大部分Go用戶比較關(guān)注Go 1。
其次,更重要的是他們示范了web.go和mustache.go庫(kù)。在GO(2009年年底或2010年初)發(fā)布不久后,第三方庫(kù)被編譯,從那時(shí)起,GO標(biāo)準(zhǔn)的http和template得到了大力發(fā)展。
第三,這里有一個(gè)新的"database/sql"包提供單一的SQL數(shù)據(jù)庫(kù)接口,還有幾個(gè)驅(qū)動(dòng)程序,包括sqlite,因此,在Go語(yǔ)言基準(zhǔn)測(cè)試中很容易執(zhí)行部分?jǐn)?shù)據(jù)庫(kù)。
鑒于框架的基準(zhǔn)測(cè)試任務(wù),我想這就是作者進(jìn)行框架對(duì)比的原因。幸運(yùn)的是對(duì)于Go程序員來說,Go項(xiàng)目中的http、templates和databases在標(biāo)準(zhǔn)庫(kù)中被稱為代碼的核心功能。
powertower :
“Hello World”測(cè)試將被并發(fā)工作所取代,比如用戶訪問、編譯達(dá)到100s的請(qǐng)求數(shù),
我記得有個(gè)測(cè)試是將MySQL與SQL Server(Microsoft's SQL Server)進(jìn)行對(duì)比,還是幾年的事情了。一個(gè)用戶用MySQL擊敗了SQL Server 。所有人都為之驚嘆,究竟MySQL如何優(yōu)于SQL Server。
j45 :
有趣的對(duì)比,很喜歡這個(gè)特別的測(cè)試,我們可以在這里發(fā)表自己的看法并進(jìn)行討論。
比如:是否真的有一個(gè)框架適合所有應(yīng)用?
我們都知道過早的優(yōu)化不適合開發(fā),重要的是有人使用過嗎?