你應該知道的9款流行 Web 框架及其優缺點
對於 Web 開發人員來說,找到一些合適的工具,能讓工作輕鬆許多。這其中,Web 框架更是提升工作效率的“利器”。但因為可選的 Web 框架非常多,如何選擇也是一件令人頭疼的事情。
本文列出了9款目前比較流行的 Web 框架,並對優缺點進行分析,希望能對大家有所幫助。(內容主要編譯自Ken Mazaika的The 9 Most In-Demand Web Frameworks And What You Need To Know About Them)
首先,
什麼是 Web 框架?
當 Web 瀏覽器使用 HTTP 和在其他地方運行的服務器(計算機)通訊時,這些服務器會收到一些通知:
- 所選的 URL
- 如何輸入網址(通過表單提交或隻是在瀏覽器欄中輸入網址)
服務器要幹很多事情,比如:
- 讀取數據庫裏的數據和添加數據
- 找到正確的結果(用戶是否被允許查看試圖訪問的頁麵?是否要發送到不同的URL?等等)
- 構建用戶將看到的網頁
如果要提供更複雜的功能,就需要執行更多的步驟。作為開發人員,則需要對想要的功能列出一係列解決方案。Web 框架就是其中可選的解決方案之一。
進入正題:
編程語言:Ruby
簡介:
Ruby on Rails 是一個已經被許多公司采用的 Web 框架,是 Ruby 編程語言中 Web 框架的鼻祖,獲得了大量開發者的采用。DHH(Rails 的創始人)曾用它15分鍾左右創建一個博客。
Rails 的一大特點是約定優於配置(convention over configuration)。這意味著,它比較模式化、標準化和“約定化”,開發者通常做的是相同的事情,可以讓代碼寫到最少。
Rails 還使用了 MVC(Model-View-Controller),讓架構更有組織性,更周密。
優點:
- Rails 具有強大的命令行界麵,通過幾個簡單的命令就能在新的應用上啟動和運行。
- Rails 已經存在很長時間了,並且廣泛被使用,網絡上有很多關於它的教程。
- Rails 簡單易用,即便是複雜的問題,也能相對快速解決。
缺點:
- Rails 自動掛鉤了很多東西。啟動器裏就包含很多文件,並且有相當多的配置代碼是自動編寫的,有些人可能會對此擔心。
整體來看,鑒於其靈活性及便捷性,Rails 是一個非常理想的 Web 框架,值得初學者優先學習。
編程語言:Ruby
簡介:
上麵的5行代碼就是做一個最低限度配置的空 Web 應用所需要的全部代碼, 如果拿它和 Ruby on Rails 進行比較,會發現它需要的代碼更少(而且隻有一個文件,而不是幾十個)。
然而,Sinatra 的簡單性是一把雙刃劍。 它用的是和 Ruby on Rails 相反的方法,需要開發者手動配置所有的東西。
優點:
- Sinatra 是輕量級框架的領頭羊。
- Sinatra 高度可配置,注重開發的自由度。
缺點:
- 由於不側重“慣例”,沒有相同的文件夾結構,所以會比較難去理解現有的 Sinatra 應用。
- Sinatra 不常用於實際生產項目當中。
- 手動配置很多東西往往需要更多的時間,效率會受影響。
編程語言:JavaScript
簡介:
ExpressJS 是一個 JavaScript Web 框架,基於 Node.js。看起來有沒有熟悉,它的代碼非常類似 Sinatra 的代碼,也有和 Sinatra 相似的簡單性。 在一個準 Express 應用中隻有兩個代碼文件:
- package.json,這是 NPM 自動生成的文件。
- app.js,這裏包含著應用程序的完整代碼。
優點:
- 高靈活性。
- 可以隻使用一種編程語言。
- 輕量。
缺點:
- 更多選項=更多選擇。 選擇意味著需要研究不同的選項,找出將它們應用到自己的項目當中的方法,這往往需要更多時間。
編程語言:Javascript
簡介:
SailsJS 可以看成是 JavaScript 版的 Rails,有一個命令行工具去生成一個完整的默認應用程序,自帶許多合理的默認配置和數值。
同樣,Sails 也有 MVC 架構,啟動一個完整的應用也會有數十個默認的文件。
優點:
- 有許多默認已配置好的方法完成構建 Web 應用所涉及的大部分工作。
- 命令行程序使得構建新應用和功能更為輕鬆。
缺點:
- 盡管是一個看起來很強大的框架,人氣也不低,但是並沒有多少公司采用。
編程語言:JavaScript
簡介:
MEAN 是 ExpressJS 的擴展,堆棧了如 MongoDB、AngularJS 和 WebPack 等技術。MEAN 用JavaScript 一種語言來驅動整個應用。
MongoDB 是一個在概念上與其他大多數據庫有較大區別的數據庫,它允許 JSON 數據在其中自由隨意,這意味著數據庫條目是靈活的,但同時也導致無效的記錄成了一個非常容易遇到的問題。它不是通過 SQL 與數據庫交互,而是使用其獨有的 JavaScript。
優點:
- 與 SailsJS 一樣,MEAN 堆棧包含構建複雜 Web 應用所需的所有組件。
缺點:
- 頁麵加載要兩個階段,而且第一階段看起來有點搞笑。發生這種情況是因為視圖不是在服務器端呈現,而隻在瀏覽器中呈現。這意味著用戶最初看到的是不完整的頁麵,頁麵的完整內容要過一會才能加載。
- MEAN 堆棧包含許多技術,如 MongoDB,在其他框架中構建 Web 應用時通常不使用這些技術。
補充幾句個人觀點:
這個包含 MongoDB 的框架對我來說毫無意義,幾乎所有其他 Web 框架都使用標準數據庫 SQL。在我看來,MEAN 堆棧可能隻在那些 MongoDB 真正“發光發熱”的場景中有價值,但 Mongo 又是一個在高負載的時候才需要的東西,比如廣告網絡和 API 負載高的時候。
不可否認 MEAN 在某些情況下是有意義的,但對於典型的 Web 應用,我不太建議使用。因為 MEAN 在應用的每一個部分隻使用 JavaScript 編程語言,這聽起來會很容易掌握,但是像 MongoDB 和 WebPack 這樣的東西使得 MEAN 實際上比那些解決問題的“標準”技術更困難。
編程語言:Python
簡介:
Django 是一個運行在 Python 上的 MVC Web 框架。 它也有一些打開即用的配置,它與 Ruby on Rails 框架有許多相似之處,也有不少區別。 這個 Web 框架改變了控製器和視圖的職責,但毫無疑問它是一個優秀的 Web 框架。
優點:
- 輕量、少配置。
- 提供完整的開發堆棧,同時仍然遵循 Python 的“清晰”語言的設計理念,允許在快速開發和長期維護之間實現平衡。
注意:
- Python 是一種類似於 Ruby 的語言,但它們的使用者會有不同的領域傾向, 通常使用 Python 的開發人員往往是在數據科學、統計或分析領域工作。
編程語言:Python
簡介:
Tornado 是一個沒有怎麼宣傳的 Python Web 框架,它快速、高效,並允許開發人員訪問 python 的大數據庫。
優點:
- 在需要短時間內發生許多請求的情況下是優秀的。
缺點:
- 結構的缺乏導致應用相互不同。
- 對於初學者來說,擁有太多的自由可能會導致亂碼。在其他的框架中有過經驗的開發人員更願意以深思熟慮的方式去構建應用。
編程語言:Java 或 Scala
簡介:
Play 同樣是一個輕量級的、無狀態的 Web 框架,學到了 rails 的優點,使用構建在 Akka 之上的完全異步模型,提供可預測的和最小的資源消耗(CPU,內存,線程)。
優點:
- 在 Java 虛擬機上運行,Play 是最高效的編程環境之一。
缺點:
- 大多數 Web 應用都是用所謂的“腳本語言”構建的,允許快速更改頁麵的視覺效果。 Java 增加了一個稱為“編譯”的步驟,需要在應用的更改之間進行。
編程語言:PHP
簡介:
Laravel 是一個用 PHP 編寫的框架。 10年前,PHP 是幾乎所有 Web 應用構建的標準編程語言,不過如今,受 Ruby、JavaScript 和 Python 影響,PHP 失去了很大的市場份額。
盡管如此,Laravel 仍是一個非常成熟的框架,允許使用 PHP 構建漂亮的代碼。
優點:
- Laravel 是一個很完美的 MVC 框架,借鑒了 Ruby on Rails 框架中使用的許多架構決策。
缺點:
- 使用 PHP 的開發人員和產品在減少(原文是這麼寫的^_^)
看完上麵列出的這些不同的框架,很容易發現它們有互相在尋找靈感,許多功能、特性其實還蠻相似的。所以,說哪個好哪個不好,並沒有什麼意義,找到合適自己的才是關鍵。上麵的框架可以簡單分為兩種類型:
一、簡約框架
ExpressJS、Tornado 和 Sinatra 都是簡約框架,他們提供啟動需要的最低配置。
這些框架需要開發人員手動添加每個單獨的組件,給予足夠的自由度去完成項目。此外,通過強製自己配置應用的各方各麵,可以掌控更多主動權,並在每種情況下都使用理想的工具。
當然,也有一些缺點。會經常發現自己處於需要分析不同選項並做出很多選擇的情況下。
二、Omakase 框架
Rails、SailsJS、MEAN.io、Laravel 和 Play 都是 Omakase 框架,它們建議開發者以某種“正確”的方式編寫代碼,並且給出社區標準。
這些框架提供開發所需要的一切,打開即可編程。如果想使用其他的東西,它們還允許選擇停用。構建這些框架的開發人員已經為後來者做出了一些關鍵決策,因此可以遵循他們建議使用的模式。
這對初學者來說有很大的優勢,初學者往往在學習 Web 框架的時候,你還需要學習數據庫、HTTP 請求、設置應用在 Internet 上運行等等知識。由於有一個被廣泛接受的社區標準,學習一個像 Rails 這樣的 Web 框架可以:
- 了解社區如何同意以正確的方式做某事。
- 有時間思考其他編程概念,學習其他知識。
- 一旦學習了某個框架社區的建議,將有經驗來更好地評估其他框架。
文章轉載自 開源中國社區 [https://www.oschina.net]
最後更新:2017-06-30 16:31:51