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