什么是前后端分離除了前端之外都屬于后端了。 你負(fù)責(zé)貌美如花,我負(fù)責(zé)賺錢養(yǎng)家 在傳統(tǒng)的像ASP,JSP和PHP等開發(fā)模式中,前端是處在一個混沌的狀態(tài)中,可以說是沒有獨(dú)立的“人格”可言。 前端負(fù)責(zé)切圖和編寫靜態(tài)頁面模板,后端將數(shù)據(jù)渲染到前端提供的頁面模板中,最后將頁面渲染到瀏覽器展示。 這個過程中,前端只提供頁面模板或者寫一些JavaScript腳本,有的甚至JS腳本都是后端來寫,前端的作用只局限于切圖和樣式模板文件,這種角色就是傳說中的“切圖仔”。 這也是為什么行業(yè)內(nèi)都覺得前端是一個很簡單的工作,只要花個一周,學(xué)下HTML、CSS和PS的簡單技巧就可以勝任的工作。 現(xiàn)在看來,那時候的前端就是一個打醬油的,發(fā)展前景很有限。那時候的JavaScript腳本也比較簡單,一個jQuery就可以橫掃天下,所以對于精通語言類代碼的后端程序員來說,可以很快的上手JavaScript,對前端來說,發(fā)展空間就更小了。 那時候前端內(nèi)心是這樣的 前后端分離,不只是簡單的代碼的分離。 首先是要架構(gòu)上分離解耦,逐漸擺脫前后端在架構(gòu)上的依賴,前后端各司其職,分開部署在不同的服務(wù)器上,通過RESTful接口傳遞數(shù)據(jù)。減輕后端服務(wù)器的壓力,后端服務(wù)器不再負(fù)責(zé)頁面渲染,只負(fù)責(zé)輸入數(shù)據(jù),吞吐量提升了好幾倍。 其次是邏輯分離,不分離的時候,對于業(yè)務(wù)代碼的界限很不明確,業(yè)務(wù)邏輯基本都放在后端,分離之后,前端也承擔(dān)了一部分不該后端來寫的業(yè)務(wù)邏輯,數(shù)據(jù)處理更加清晰。 最后是系統(tǒng)分離,同一個后端系統(tǒng),可以將同樣的接口數(shù)據(jù)提供給PC端、Mobile端和Native端等不同的前端終端,不需要為每一種終端提供一套接口。同樣,對于前端應(yīng)用來說,可以更方便的調(diào)用多個后端服務(wù)器的接口,處理和展示多個系統(tǒng)間的數(shù)據(jù)。
前后端分離,讓軟件開發(fā)的流程更加清晰,解決了開發(fā)階段的痛點(diǎn)。 從前,前端不止要學(xué)習(xí)后端的模板渲染語法,還要配置后端的開發(fā)環(huán)境,并不斷同步后端的代碼,這對于前端來說是非常痛苦的。 而現(xiàn)在,前端有自己的服務(wù)器,不需要再依靠后端服務(wù)器來支持項(xiàng)目運(yùn)行,如果在開發(fā)階段,還可以使用mock數(shù)據(jù)(要先和后端確定接口數(shù)據(jù)結(jié)構(gòu)),擺脫對后端接口的依賴,這樣極大的提高了開發(fā)效率,系統(tǒng)分工也更加明確。
分離之后的前端內(nèi)心是這樣的
當(dāng)然,如果只是提出一個概念,技術(shù)上不能實(shí)現(xiàn)也是空談。 隨著前端技術(shù)的更新發(fā)展,短短幾年內(nèi)就發(fā)展出了gulp、webpack等前端工程化工具,HTML5和JavaScript也不斷更新新特性,提供了前端應(yīng)用場景和開發(fā)前端獨(dú)立應(yīng)用的技術(shù)支持,React Native、PWA和微信小程序等也都是以前端技術(shù)為基礎(chǔ)開發(fā)移動APP和小應(yīng)用,前端邁入了一個最好的時代。 前端技術(shù)在近些年的發(fā)展,也使得后端不能再將前端束縛在自己麾下,必須放開手讓前端闖出自己的一片天,發(fā)揮大前端的優(yōu)勢。只是下面看一下,前端技術(shù)在近幾年有了哪些發(fā)展,使得前后端分離成為可能。
網(wǎng)站 H5游戲 H5游戲的開發(fā)采用HTML5的canvas等制作,或者也可以使用webgl來做3D的H5游戲。 移動APP 我們這里說的移動APP,是指使用前端技術(shù)來做的。前幾年,比較火的Hybird APP框架是ionic,也有國內(nèi)開發(fā)者做的mui和HTML5+框架,這些框架的技術(shù)是將html、css和JavaScript打包成一個文件,將文件放到webview中訪問,最后再在外層套上原生應(yīng)用的殼,生成IOS和Android的安裝文件。這種APP可以做很多簡單的APP,不適合交互比較復(fù)雜的APP,因?yàn)閣ebview的性能還是存在一定的問題,在Android設(shè)備上的卡頓變現(xiàn)比較明顯。 這兩年,以React為語法基礎(chǔ)的React Native和以Vue為語法基礎(chǔ)的Weex框架,成為新一代使用前端技術(shù)開發(fā)移動APP的框架,它們拋棄webview使用新的渲染機(jī)制,極大的提升了APP的性能和體驗(yàn)。目前這兩者都處在完善階段,在未來很被看好。 桌面應(yīng)用 Chrome APP 2010年Google推出了基于Chrome開發(fā)的PC端操作系統(tǒng)Chrome OS,特點(diǎn)就是速度快,設(shè)計(jì)簡潔等,相對應(yīng)的市場上也推出了很多基于Chrome OS的筆記本電腦,廠商有三星和戴爾等。 微信小程序 小程序按照前端技術(shù)來設(shè)計(jì)開發(fā),也做好了系統(tǒng)的兼容和不同設(shè)備的適配的設(shè)計(jì),開發(fā)者只需要專注于實(shí)現(xiàn)業(yè)務(wù)代碼即可。所以,只要熟悉前端技術(shù)就可以很快的做出一個小程序。 Web VR、Web AR 前端技術(shù)webgl,可以在瀏覽器上很好的實(shí)現(xiàn)3D場景,Three.js是這方便很好的JavaScript框架。Chrome瀏覽器已經(jīng)兼容Web VR,配合Daydream View,可以瀏覽Web VR頁面。
分離后的前端,不再是一個簡單的HTML文件,已經(jīng)是一個獨(dú)立的應(yīng)用系統(tǒng)。除了要考慮頁面的數(shù)據(jù)渲染展示,還要用工程化的思想來考慮前端的架構(gòu),前后端的交互和數(shù)據(jù)安全等事情。 架構(gòu) 前端應(yīng)用部署在Nodejs、Nginx或者Nodejs和Nginx組合的服務(wù)器上,通過反向代理轉(zhuǎn)發(fā)頁面請求到后端服務(wù)器,相當(dāng)于在傳統(tǒng)的流程中加了Nodejs這一層。當(dāng)然,也可以用Nodejs服務(wù)器來承擔(dān)一部分負(fù)載均衡的工作,業(yè)務(wù)邏輯也可以放在Nodejs這一層來處理,例如:通過判斷請求是來自PC還是APP,將請求發(fā)到不同的后端服務(wù)器。 Nodejs的架構(gòu)中,分層如下: RESTful接口交互 REST是“呈現(xiàn)狀態(tài)轉(zhuǎn)移(REpresentational State Transfer)”的縮寫,一種API的架構(gòu)風(fēng)格,在客戶端和服務(wù)端之間通過呈現(xiàn)狀態(tài)的轉(zhuǎn)移來驅(qū)動應(yīng)用狀態(tài)的演進(jìn)。 在 REST 樣式的 Web 服務(wù)中,每個資源都有一個地址。資源本身都是方法調(diào)用的目標(biāo),方法列表對所有資源都是一樣的。這些方法都是標(biāo)準(zhǔn)方法,包括 HTTP GET、POST、PUT、DELETE,還可能包括 HEADER 和 OPTIONS。 工程化構(gòu)建 Nodejs不止可以用來做前端服務(wù)器,在開發(fā)階段,它也能發(fā)揮很大的作用。 前端生態(tài)的發(fā)展,是圍繞著Nodejs進(jìn)行的。用npm來管理項(xiàng)目依賴,可以很好的維護(hù)和運(yùn)行在Nodejs環(huán)境上。 打包工具grunt、gulp、webpack和rollup等,都是運(yùn)行在nodejs上,再結(jié)合語法編譯、打包部署等插件,將應(yīng)用輸入成一個完整的應(yīng)用。 如果你使用了Angular、React或Vue框架,或者你使用瀏覽器暫時還不兼容的ES6語法,還需要在應(yīng)用打包前用babel將語法編譯成瀏覽器可識別的ES5的語法。 SPA 像Angular、React或Vue就是為了SPA而設(shè)計(jì)的,結(jié)合前端路由庫(react-router、vue-router)和狀態(tài)熱存儲(redux、vuex)等,可以開發(fā)出一個媲美Native APP的Web APP,用戶體驗(yàn)得到了很大的提升。 當(dāng)然,SPA也不是完美的,也不是適合所有的web應(yīng)用,需要結(jié)合項(xiàng)目和場景來選擇。 SPA有如下缺點(diǎn):
前端技術(shù)日新月異,發(fā)展迅速,作為一個與時俱進(jìn)的前端工程師,還是要不斷的學(xué)習(xí),更新技術(shù)棧。既然這樣,我們要掌握的技術(shù)有哪些呢? 以下列出一些前端技術(shù),有些已經(jīng)不會再應(yīng)用在新系統(tǒng)中,但是還是有很多老系統(tǒng)是使用它們做的。 語言知識
框架、庫
工具
前端時代的到來,對于前端開發(fā)來說,是一個最好的時代,同時也是最壞的時代。 說是最好的時代,是因?yàn)楦鞣N前端技術(shù)都更新?lián)Q代,開始應(yīng)用于更多場景,發(fā)揮出更大的優(yōu)勢和作用。對于前端開發(fā)者來說,是充滿很多的機(jī)會的。 說是最壞的時代,是因?yàn)榧夹g(shù)更新迭代速度非??欤赡茉趦扇陜?nèi),整套技術(shù)棧都要更新一遍,需要開發(fā)者不斷的取學(xué)習(xí),更新自己的知識庫,才能在技術(shù)更迭的大潮中被拍打到浪頭之后。
文章來源:https://mp.weixin.qq.com/s/_N9RKbTOGcohmrJXg9rqEg |
|