作為後端開發者的思考:如何看待如今的前端架構

DisonTangor發表於2021-06-25

引言

相信許多開發者都會或多或少的接觸過Web開發,也會發現體系結構中存在著相同和不同之處。這其中的緣由來自於歷史的原因。在21世紀初的8年間,對於Web的開發,就有了許許多多的語言及其架構。例如Java,從Servlet分別管理Request和Response到JSP前後端融合技術,再到EJB、Struts和Spring體系將業務邏輯功能向後遷移。而瀏覽器由微軟的IE瀏覽器和Netscape(網景瀏覽器)之爭開始,提出過許多前端優化,如VBScript、JavaScript、JScript、CoffeeScript以及XHR(XMLHttpRequest)技術等。再到FireFox創立和Chrome專案的誕生,出現了KDE的KHTML、Apple的WebKit、FireFox的SpiderMonkey和Google的Chrome專案及其V8引擎。從這開始,前端技術開始逐漸健壯起來。但是了很多不錯的腳手架工具,如JQuery、Bootstrap、Foundation、ChartJS等。而最有意思的是Ryan Dahl基於Chrome V8引擎和libuv庫開發出了Node.js。這個工具使得前後端使用統一的語言JavaScript進行開發。這一創舉無疑讓前端開發者狂喜雀躍。

隨著相關社群不斷的活躍,又誕生出了npm、Bower、Gulp、Browserify等圍繞著框架性的開發工具。另一方面,PC硬體技術的不斷提升,以及ios/Android陣營的擴張,谷歌(Google)和臉書(FaceBook)的工程師們便開始思考著:

  1. 前端是否可以如後端一樣通過MVC架構來管理;
  2. 是否可以將業務邏輯從後端向前遷移來提升效能。

於是,他們提出了VirtualDOM技術,並將MVVM的概念實現,誕生了谷歌的AngularJS、FB(FaceBook)的React以及尤雨溪開發的Vue。而且也有了專業的打包封裝工具Webpack、Rollup、Snowpack、Vite等。如今,瀏覽器已經形成了聯盟,制定統一的標準,而前端已不再是B\S體系的代表,它的野心更大。桌面應用開發Electron和手機App開發的React Native等工具也不斷出現在我們當前的Web世界裡,逐漸成為跨平臺的先鋒。

前後端分離架構

面對這樣的激情,我不由自主地敬佩著他們。我接下來就來講解Web框架的基礎。相信很多人都見過下面這張圖。原理就是瀏覽器會根據HTTP的URL將請求傳送到伺服器(實際過程非常複雜),伺服器的應用服務會將Request解析根據業務邏輯轉化成Response返回(這就是我們後端開發者編寫的功能)。這裡我就用Python的Flask來演示:

Web原理

程式碼如下:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

很明顯這裡返回的Response是字串"<p>Hello, World!</p>"。往常後端開發前端都是通過Render來渲染HTML頁面,在這個過程中來實現後端對HTML的動態處理。典型就是Python的Ninja和C#的cshtml。很明顯這是一個同步渲染。而隨著XHR和Ajax非同步請求技術的不斷推廣,前後端的開發模式逐漸形成分離。後端只需要提供API介面返回JSON資訊。而前端根據返回的JSON來重新渲染頁面控制元件。

非同步請求原理

於是,前後端分離的研究就一直圍繞在API介面的優化,前端出現了axios和ES6的fetch,介面上出現了Restful API、OpenAPI、GraphQL和gRPC等形式。

起初,我認為前後端分離應該是前端通過nodejs執行和渲染,而後端負責DB資料的處理,通過介面提供前後端互動,但是這種模式其實是一種微服務形式。好處是前端開發者和後端開發者彼此溝通介面細節,獨立開發各自的功能, 但是除非你的業務很大,擁有負載均衡的伺服器叢集,保證了彼此非常高速的頻寬,否則就是將大象裝冰箱,徒勞而已。

前後端分離-微服務模式

但隨著我對於Web的不斷深入研究和思考,混合式程式設計模式或許更適合輕量級專案開發,程式碼歸屬於同一個目錄,由專案經理負責維持前後端開發的協作工作,在統一介面和文件細節後,後端工程師開發資料介面及介面測試,前端工程師負責開發頁面和介面呼叫的測試,而且通過Node.js來自行模擬介面的資料。也就是後端服務和Node.js服務Render統一份View層檔案。但是View層檔案應該採用MVVM的框架架構。這樣提供了程式碼的統一性和開發工作的獨立性。可以很好的結合測試框架。

未來展望

目前雲技術越發成熟,以及DevOps和5G的發展,將來前端依舊會是跨平臺的先鋒,前後端分離的發展也會愈發激烈。但是我更覺得後端也具備著巨大的發展前景。如網路系統研發,分散式叢集架構,大資料,雲端計算,區塊鏈和人工智慧等。我覺得在未來,做技術是越來越有意思的工作。

感謝

非常感謝微軟提供的.NET體系結構,使我能全面瞭解各種領域的開發技術,同時感謝為開源專案不斷提供創意和分享的工作者們,以及為Python、C/C++、Node.js和Java等語言的創作者們。

相關文章