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