全棧、均棧、MERN棧,哪個(gè)才是下一代Web項(xiàng)目的正確棧?
譯文【51CTO.com快譯】眾所周知,我們?cè)陂_(kāi)始任何Web或移動(dòng)應(yīng)用項(xiàng)目的開(kāi)發(fā)之前,都需要事先選擇好最適合項(xiàng)目的主要實(shí)現(xiàn)技術(shù)。目前,可選擇的技術(shù)棧可謂林林總總,歸納起來(lái),包括全棧(Full-Stack)、均(MEAN)棧和MERN棧三大類。下面,我將逐一和您討論這些術(shù)語(yǔ)背后相關(guān)技術(shù)的優(yōu)缺點(diǎn),以方便您做出明智的選擇。
到底什么是技術(shù)棧?
作為一種數(shù)據(jù)類型,技術(shù)棧實(shí)際上是一些組件的集合。它具有兩個(gè)主要功能。一個(gè)是以推送的形式,向集合中添加組件;另一個(gè)是以彈窗的方式,刪除最近添加的,但尚未刪除的組件。可見(jiàn),它有點(diǎn)類似一個(gè)堆疊了一組實(shí)用工具的架子(棧),您可以輕松地從其頂部拉出需要的工具和技術(shù)。下面是技術(shù)棧中的常見(jiàn)技術(shù):
- 前端技術(shù)-HTML、JavaScript、CSS、PostgreSQL、jQuery;
- 前端框架-Angular.js、Polymer.js、bonebjs、Ember.js;
- 后端技術(shù)-Nodejs,PHP、.NET、Ruby on Rails;
- 后端框架-ASP.NET、Rails、Express、CodeIgniter;
- 數(shù)據(jù)庫(kù)技術(shù)-Oracle、Microsoft SQL Server、MySQL、MongoDB。
針對(duì)不同的業(yè)務(wù)場(chǎng)景,我們可以采用全棧(Full-Stack)、均(MEAN)棧和MERN棧三種方式。下面我們來(lái)詳細(xì)討論三者各自的特點(diǎn):
全棧的相關(guān)概念
作為Web開(kāi)發(fā)的一部分,全棧開(kāi)發(fā)泛指通過(guò)互聯(lián)網(wǎng)或內(nèi)聯(lián)網(wǎng),進(jìn)行各種Web相關(guān)任務(wù)的開(kāi)發(fā),其中包括應(yīng)用程序前端(我們也稱為客戶端)和后端(我們也稱為服務(wù)器端)等完整的開(kāi)發(fā)。而憑借著云計(jì)算所帶來(lái)的各項(xiàng)技術(shù)優(yōu)勢(shì),全棧開(kāi)發(fā)給整個(gè)開(kāi)發(fā)領(lǐng)域帶來(lái)了翻天覆地的變化。
全棧工程師同時(shí)在客戶端和服務(wù)器端軟件上,運(yùn)用完整的技術(shù)棧開(kāi)展開(kāi)發(fā)工作,其中涉及到各種前端技術(shù)、后端開(kāi)發(fā)語(yǔ)言、數(shù)據(jù)庫(kù)、服務(wù)器、API、以及版本控制系統(tǒng)。這樣也就是所謂“全棧”名稱的由來(lái)。
全棧開(kāi)發(fā)人員既可以保持目標(biāo)系統(tǒng)的各個(gè)部分平穩(wěn)運(yùn)行,又可以為團(tuán)隊(duì)中的每個(gè)成員提供幫助,并大幅減少團(tuán)隊(duì)用于溝通的時(shí)間和技術(shù)成本。畢竟,這樣一個(gè)“萬(wàn)金油”式的角色,能夠?yàn)楣竟?jié)省在人力、基礎(chǔ)架構(gòu)和運(yùn)營(yíng)上的各項(xiàng)成本。
全棧開(kāi)發(fā)需具備的專業(yè)知識(shí)
1)前端技術(shù)
全棧開(kāi)發(fā)人員應(yīng)該掌握諸如HTML5、CSS3、JavaScript之類重要的前端技術(shù),并對(duì)jQuery、LESS、Angular和React JS等第三方庫(kù)有所了解。
2)開(kāi)發(fā)語(yǔ)言
全棧工程師應(yīng)該至少知道一種服務(wù)器端編程語(yǔ)言,例如:Java、Python、Ruby、以及.Net等。
3)數(shù)據(jù)庫(kù)和緩存
對(duì)各種DBMS技術(shù)的了解,是對(duì)全棧開(kāi)發(fā)人員的另一項(xiàng)重要要求。其中,數(shù)據(jù)庫(kù)包括:MySQL、MongoDB、Oracle、以及SQL Server等場(chǎng)景數(shù)據(jù)庫(kù)。而諸如varnish、Memcached和Redis之類的緩存機(jī)制也是必備的知識(shí)。
4)基本設(shè)計(jì)能力
作為一名全棧開(kāi)發(fā)人員,除了必備的設(shè)計(jì)知識(shí),還需要了解UI/UX方面的基本設(shè)計(jì)理念。
5)服務(wù)器
由于需要接觸到Apache或Nginx服務(wù)器,因此全棧開(kāi)發(fā)人員如果具備Linux的良好背景,則能夠輕松地管理各種服務(wù)器。
6)版本控制系統(tǒng)(VCS)
版本控制系統(tǒng)能夠方便全棧開(kāi)發(fā)人員跟蹤代碼庫(kù)中的所有更改。通過(guò)Git的相關(guān)知識(shí),他們能夠了解如何獲取最新的代碼,更新部分代碼,以及在不破壞其他開(kāi)發(fā)人員代碼的情況下進(jìn)行修改。
全棧的優(yōu)勢(shì)
1、切換簡(jiǎn)單
全棧開(kāi)發(fā)人員具有根據(jù)項(xiàng)目的需求,在前端和后端開(kāi)發(fā)之間進(jìn)行自由切換的能力。
2、整體設(shè)計(jì)架構(gòu)
全棧開(kāi)發(fā)人員的顯著特征之一便是:他們不僅能夠從事Web開(kāi)發(fā),而且能夠負(fù)責(zé)整個(gè)設(shè)計(jì)的架構(gòu)。
3、節(jié)約成本
分別雇用前端和后端開(kāi)發(fā)人員的成本,比起僅聘請(qǐng)前后端全能的全棧開(kāi)發(fā)人員來(lái)說(shuō),顯然要高出許多。
4、易于掌控設(shè)計(jì)和實(shí)施的各個(gè)狀態(tài)
由于更加全面地?fù)碛性O(shè)計(jì)上的所有權(quán),因此全棧開(kāi)發(fā)人員能夠更加自如地實(shí)施各項(xiàng)構(gòu)建流程。
5、易于技術(shù)更新
與那些僅從事前端或后端技術(shù)的人員相比,全棧開(kāi)發(fā)人員擁有更全面的知識(shí)結(jié)構(gòu),因此他們有實(shí)力輕松地升級(jí)或切換到新的技術(shù)和工具上。
均棧的相關(guān)概念
均棧使用MongoDB、Express Js、Angular和Node Js(抬頭字母簡(jiǎn)稱MEAN),來(lái)分析和理解Web開(kāi)發(fā)活動(dòng)中的動(dòng)態(tài)性和復(fù)雜性。對(duì)于大多數(shù)開(kāi)發(fā)人員而言,他們?cè)谌珬TO(shè)計(jì)中往往會(huì)采用MEAN技術(shù),來(lái)專注于各項(xiàng)功能的易用性。
正如前面提到的,組成均棧的四項(xiàng)技術(shù)分別是:作為數(shù)據(jù)庫(kù)的MongoDB,作為服務(wù)器系統(tǒng)的Express,針對(duì)前端的Angular,以及作為JavaScript服務(wù)器端事件驅(qū)動(dòng)的I/O(輸入/輸出)環(huán)境--NodeJ。
均棧的關(guān)鍵特征是:所有這四種技術(shù)均基于框架中的Javascript和JSON(JavaScript Object Notation,對(duì)象表示法)數(shù)據(jù),進(jìn)而節(jié)省了消耗在潛在JSON編碼上的時(shí)間。
MEAN前端
Angular是由Google創(chuàng)建和維護(hù)的開(kāi)源JavaScript框架。它帶有管理客戶端上所有應(yīng)用與交互的功能,并主要用于構(gòu)建在網(wǎng)頁(yè)上加載初始請(qǐng)求的SPA(Single Page Application,單頁(yè)面應(yīng)用程序)。
通過(guò)執(zhí)行客戶端的側(cè)路由(side routing),Angular能夠大幅減輕服務(wù)器的負(fù)載。同時(shí),由于它屬于MVW(Model View Whatever,不限模型與視圖)型架構(gòu),因此均棧的前端部分(Angular)可由HTML、CSS或Javascript組成。
MEAN后端
MEAN后端用于設(shè)計(jì)表格與文檔的后端,通過(guò)其服務(wù)來(lái)存儲(chǔ)前端的數(shù)據(jù),以及可以使用主鍵/外鍵來(lái)檢索數(shù)據(jù)庫(kù)的結(jié)構(gòu)。
由于均棧里各種工具都可以在本地使用底層的JSON數(shù)據(jù),因此Node + Express.js + MongoDB數(shù)據(jù)庫(kù)的結(jié)合,為基于JSON的Web服務(wù)提供了出色的實(shí)現(xiàn)效果??梢?jiàn),相對(duì)于前面提到的全棧,均棧開(kāi)發(fā)服務(wù)(請(qǐng)參見(jiàn)--https://www.pixelcrayons.com/javascript-development/mean-stack-development?utm_source=dzone&utm_medium=meanstack-MJ-MS&utm_campaign=MJ)具有效率和生產(chǎn)率上的優(yōu)勢(shì)。
均棧的優(yōu)勢(shì)
均棧的主要優(yōu)點(diǎn)是通過(guò)開(kāi)源的方式,方便開(kāi)發(fā)人員去使用互聯(lián)網(wǎng)上免費(fèi)提供的模塊、庫(kù)和公共存儲(chǔ)庫(kù)。
- 由于均棧中是通過(guò)龐大的庫(kù)中提供多種JavaScript模塊,因此用戶能夠輕松地使用Node.js來(lái)開(kāi)發(fā)Web應(yīng)用。
- 均棧非常靈活,您可以添加更多僅用作開(kāi)發(fā)Web應(yīng)用平臺(tái)的對(duì)象。
- 如果需要在開(kāi)發(fā)后測(cè)試軟件應(yīng)用,您可以使用MEAN將應(yīng)用程序托管在云端。此外,它也提供了橫跨服務(wù)器的自動(dòng)共享和集群支持。
- 由于Node.js包含了大量可以被直接用于開(kāi)發(fā)Web應(yīng)用的模塊庫(kù),因此您可以通過(guò)均棧來(lái)節(jié)省大量的時(shí)間。
- 易于在客戶端和服務(wù)器之間切換。由于Node.js是一種通用語(yǔ)言,可以讓您輕松地在客戶端和服務(wù)器端之間進(jìn)行控制,因此您無(wú)需Apache之類的第三方服務(wù)器,便可打開(kāi)應(yīng)用程序。
- 作為一個(gè)開(kāi)源的JavaScript框架,Angular.js提供了可維護(hù)、可重用和可測(cè)試性。而得益于非阻塞的架構(gòu),Node.js也具有快速且可擴(kuò)展的特性。可見(jiàn),各項(xiàng)MEAN技術(shù)都具有高性能與高可用性。
MERN棧的相關(guān)概念
除了將React代替了Angular,MERN棧幾乎與均棧如出一轍。MERN棧也是由開(kāi)源組件所組成,并提供了一個(gè)端到端框架,用來(lái)構(gòu)建全面的Web應(yīng)用,并讓瀏覽器能與數(shù)據(jù)庫(kù)相連接。
在介紹MERN棧之前,我們首先來(lái)了解一下React Js。React是由Facebook的Ads組織開(kāi)發(fā),使用的是典型的客戶端MVC模型。該模型具有所有常見(jiàn)的雙向數(shù)據(jù)綁定和模板。視圖會(huì)持續(xù)偵聽(tīng)模型中的更改,而作為更改的響應(yīng),視圖會(huì)自行更新。
不過(guò),隨著應(yīng)用程序變得越來(lái)越復(fù)雜,而用于更新視圖的代碼也會(huì)存在著細(xì)微差異,因此這類級(jí)聯(lián)更新(Cascading updates)已變得難以維護(hù)。這也正是需要用聲明性(declarative)構(gòu)建,來(lái)取代命令性(imperative)的原因。
MERN棧的優(yōu)勢(shì)
1、JavaScript無(wú)處不在
MERN的最大優(yōu)勢(shì)是:統(tǒng)一使用了JavaScript語(yǔ)言。我們可以將JavaScript用于客戶端和服務(wù)器端代碼,甚至可以用它來(lái)編寫(xiě)MongoDB的數(shù)據(jù)庫(kù)腳本。因此,您唯一需要了解和熟悉的語(yǔ)言便是JavaScript。
2、JSON無(wú)處不在
在使用MERN棧時(shí),您會(huì)發(fā)現(xiàn)在數(shù)據(jù)庫(kù)中、在應(yīng)用服務(wù)器中、在客戶端上、甚至在線路上,任何地方都會(huì)使用JSON作為對(duì)象的表示形式。
3、Node.js性能
鑒于其事件驅(qū)動(dòng)的架構(gòu)和無(wú)阻塞的I/O特點(diǎn),Node.js在此成為了一種非常快速和靈活的Web服務(wù)器。
4、NPM生態(tài)系統(tǒng)
NERN棧提供了大量可供人們免費(fèi)使用的npm軟件包。即便它們無(wú)法完全滿足您的需求,您也可以通過(guò)對(duì)其fork,來(lái)制作出屬于自己的npm軟件包。
小結(jié)
基于上述介紹,想必您已經(jīng)能夠根據(jù)自己手頭項(xiàng)目的實(shí)踐情況,明智地選擇出該用全棧(Full-Stack)、均(MEAN)棧還是MERN棧了。當(dāng)然,作為技術(shù)儲(chǔ)備和默認(rèn)情況,我還是建議您雇用全棧開(kāi)發(fā)人員(請(qǐng)參見(jiàn)--https://www.pixelcrayons.com/hire-dedicated-full-stack-developers?utm_source=dzone&utm_medium=fullstack-MJ-MS&utm_campaign=MJ),以滿足不同應(yīng)用場(chǎng)景的開(kāi)發(fā)需求。
原文標(biāo)題:Choosing the Right Stack For Your Next Web Project: Full-Stack vs MEAN Stack vs MERN Stack,作者:Jasmine Ronald
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】