你應該知道的9款流行 Web 框架及其優缺點

對於 Web 開發人員來講,找到一些合適的工具,能讓工做輕鬆許多。這其中,Web 框架更是提高工做效率的「利器」。但由於可選的 Web 框架很是多,如何選擇也是一件使人頭疼的事情。python

本文列出了9款目前比較流行的 Web 框架,並對優缺點進行分析,但願能對你們有所幫助。(內容主要編譯自Ken Mazaika的The 9 Most In-Demand Web Frameworks And What You Need To Know About Themlaravel

首先,web

什麼是 Web 框架?

當 Web 瀏覽器使用 HTTP 和在其餘地方運行的服務器(計算機)通信時,這些服務器會收到一些通知:數據庫

  • 所選的 URL
  • 如何輸入網址(經過表單提交或只是在瀏覽器欄中輸入網址)

服務器要幹不少事情,好比:express

  • 讀取數據庫裏的數據和添加數據
  • 找到正確的結果(用戶是否被容許查看試圖訪問的頁面?是否要發送到不一樣的URL?等等)
  • 構建用戶將看到的網頁

若是要提供更復雜的功能,就須要執行更多的步驟。做爲開發人員,則須要對想要的功能列出一系列解決方案。Web 框架就是其中可選的解決方案之一。django

進入正題:編程

一、Ruby on Rails

編程語言:Rubyjson

簡介:瀏覽器

Ruby on Rails 是一個已經被許多公司採用的 Web 框架,是 Ruby 編程語言中 Web 框架的鼻祖,得到了大量開發者的採用。DHH(Rails 的創始人)曾用它15分鐘左右建立一個博客ruby

Rails 的一大特色是約定優於配置(convention over configuration)。這意味着,它比較模式化、標準化和「約定化」,開發者一般作的是相同的事情,可讓代碼寫到最少。 

Rails 還使用了 MVC(Model-View-Controller),讓架構更有組織性,更周密。

優勢:

  • Rails 具備強大的命令行界面,經過幾個簡單的命令就能在新的應用上啓動和運行。
  • Rails 已經存在很長時間了,而且普遍被使用,網絡上有不少關於它的教程。
  • Rails 簡單易用,即使是複雜的問題,也能相對快速解決。

缺點:

  • Rails 自動掛鉤了不少東西。啓動器裏就包含不少文件,而且有至關多的配置代碼是自動編寫的,有些人可能會對此擔憂。

總體來看,鑑於其靈活性及便捷性,Rails 是一個很是理想的 Web 框架,值得初學者優先學習。

二、Sinatra

編程語言:Ruby

簡介:

上面的5行代碼就是作一個最低限度配置的空 Web 應用所須要的所有代碼, 若是拿它和 Ruby on Rails 進行比較,會發現它須要的代碼更少(並且只有一個文件,而不是幾十個)。

然而,Sinatra 的簡單性是一把雙刃劍。 它用的是和 Ruby on Rails 相反的方法,須要開發者手動配置全部的東西。

優勢:

  • Sinatra 是輕量級框架的領頭羊。
  • Sinatra 高度可配置,注重開發的自由度。

缺點:

  • 因爲不側重「慣例」,沒有相同的文件夾結構,因此會比較難去理解現有的 Sinatra 應用。 
  • Sinatra 不經常使用於實際生產項目當中。
  • 手動配置不少東西每每須要更多的時間,效率會受影響。

三、ExpressJS

編程語言:JavaScript

簡介

ExpressJS 是一個 JavaScript Web 框架,基於 Node.js。看起來有沒有熟悉,它的代碼很是相似 Sinatra 的代碼,也有和 Sinatra 類似的簡單性。 在一個準 Express 應用中只有兩個代碼文件:

  • package.json,這是 NPM 自動生成的文件。
  • app.js,這裏包含着應用程序的完整代碼。

優勢

  • 高靈活性。
  • 能夠只使用一種編程語言。
  • 輕量。

缺點

  • 更多選項=更多選擇。 選擇意味着須要研究不一樣的選項,找出將它們應用到本身的項目當中的方法,這每每須要更多時間。

四、SailsJS

編程語言:Javascript

簡介

SailsJS 能夠當作是 JavaScript 版的 Rails,有一個命令行工具去生成一個完整的默認應用程序,自帶許多合理的默認配置和數值。

一樣,Sails 也有 MVC 架構,啓動一個完整的應用也會有數十個默認的文件。

優勢

  • 有許多默認已配置好的方法完成構建 Web 應用所涉及的大部分工做。 
  • 命令行程序使得構建新應用和功能更爲輕鬆。

缺點

  • 儘管是一個看起來很強大的框架,人氣也不低,可是並無多少公司採用。

五、MEAN 堆棧

編程語言: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 實際上比那些解決問題的「標準」技術更困難。 

六、Django

編程語言:Python

簡介

Django 是一個運行在 Python 上的 MVC Web 框架。 它也有一些打開即用的配置,它與 Ruby on Rails 框架有許多類似之處,也有很多區別。 這個 Web 框架改變了控制器和視圖的職責,但毫無疑問它是一個優秀的 Web 框架。

優勢

  • 輕量、少配置。
  • 提供完整的開發堆棧,同時仍然遵循 Python 的「清晰」語言的設計理念,容許在快速開發和長期維護之間實現平衡。

注意

  • Python 是一種相似於 Ruby 的語言,但它們的使用者會有不一樣的領域傾向, 一般使用 Python 的開發人員每每是在數據科學、統計或分析領域工做。

七、Tornado

編程語言:Python

簡介

Tornado 是一個沒有怎麼宣傳的 Python Web 框架,它快速、高效,並容許開發人員訪問 python 的大數據庫。

優勢

  • 在須要短期內發生許多請求的狀況下是優秀的。

缺點

  • 結構的缺少致使應用相互不一樣。
  • 對於初學者來講,擁有太多的自由可能會致使亂碼。在其餘的框架中有過經驗的開發人員更願意以深思熟慮的方式去構建應用。

八、Play

編程語言:Java 或 Scala

簡介

Play 一樣是一個輕量級的、無狀態的 Web 框架,學到了 rails 的優勢,使用構建在 Akka 之上的徹底異步模型,提供可預測的和最小的資源消耗(CPU,內存,線程)。

優勢

  • 在 Java 虛擬機上運行,Play 是最高效的編程環境之一。

缺點

  • 大多數 Web 應用都是用所謂的「腳本語言」構建的,容許快速更改頁面的視覺效果。 Java 增長了一個稱爲「編譯」的步驟,須要在應用的更改之間進行。

九、Laravel

編程語言:PHP

簡介

Laravel 是一個用 PHP 編寫的框架。 10年前,PHP 是幾乎全部 Web 應用構建的標準編程語言,不過現在,受 Ruby、JavaScript 和 Python 影響,PHP 失去了很大的市場份額。

儘管如此,Laravel 還是一個很是成熟的框架,容許使用 PHP 構建漂亮的代碼。

優勢

  • Laravel 是一個很完美的 MVC 框架,借鑑了 Ruby on Rails 框架中使用的許多架構決策。

缺點

  • 使用 PHP 的開發人員和產品在減小(原文是這麼寫的^_^)

 

最後再說點

看完上面列出的這些不一樣的框架,很容易發現它們有互相在尋找靈感,許多功能、特性其實還蠻類似的。因此,說哪一個好哪一個很差,並無什麼意義,找到合適本身的纔是關鍵。上面的框架能夠簡單分爲兩種類型:

1、簡約框架

ExpressJS、Tornado 和 Sinatra 都是簡約框架,他們提供啓動須要的最低配置。

這些框架須要開發人員手動添加每一個單獨的組件,給予足夠的自由度去完成項目。此外,經過強制本身配置應用的各方各面,能夠掌控更多主動權,並在每種狀況下都使用理想的工具。

固然,也有一些缺點。會常常發現本身處於須要分析不一樣選項並作出不少選擇的狀況下。

2、Omakase 框架

Rails、SailsJS、MEAN.io、Laravel 和 Play 都是 Omakase 框架,它們建議開發者以某種「正確」的方式編寫代碼,而且給出社區標準。

這些框架提供開發所須要的一切,打開便可編程。若是想使用其餘的東西,它們還容許選擇停用。構建這些框架的開發人員已經爲後來者作出了一些關鍵決策,所以能夠遵循他們建議使用的模式。

這對初學者來講有很大的優點,初學者每每在學習 Web 框架的時候,你還須要學習數據庫、HTTP 請求、設置應用在 Internet 上運行等等知識。因爲有一個被普遍接受的社區標準,學習一個像 Rails 這樣的 Web 框架能夠:

  • 瞭解社區如何贊成以正確的方式作某事。
  • 有時間思考其餘編程概念,學習其餘知識。
  • 一旦學習了某個框架社區的建議,將有經驗來更好地評估其餘框架。
相關文章
相關標籤/搜索