Web流行框架一決高下:”快”不一定”好”

餘二五發表於2017-11-16

使用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 :

  有趣的對比,很喜歡這個特別的測試,我們可以在這裡發表自己的看法並進行討論。

  比如:是否真的有一個框架適合所有應用?

  我們都知道過早的優化不適合開發,重要的是有人使用過嗎?

本文轉自 wws5201985 51CTO部落格,原文連結:http://blog.51cto.com/wws5201985/785808,如需轉載請自行聯絡原作者


相關文章