一、為什么要做前后端分離
1铅祸、從維護(hù)側(cè)看:1)業(yè)務(wù)邏輯復(fù)雜坑质,充斥著很多明眼不可見的業(yè)務(wù)。導(dǎo)致更改bug很容易引發(fā)其他的bug临梗。2)代碼巨長無比涡扼,可讀性差。3)代碼結(jié)構(gòu)性差盟庞、分層模糊吃沪,邏輯層的代碼充斥在View層中。找代碼的時(shí)間占據(jù)解決bug的大部分時(shí)間什猖。4)前端尚處在刀耕火種的年代票彪,前端規(guī)范差、壓縮混淆不徹底不狮,難以適應(yīng)新的瀏覽器渲染技術(shù)降铸。
從性能側(cè)看:單一請(qǐng)求,往往讀取比頁面所需要多得多的數(shù)據(jù)摇零。頻繁的拉取數(shù)據(jù)推掸,不僅對(duì)后端資源是一種浪費(fèi),也會(huì)導(dǎo)致單一請(qǐng)求耗時(shí)過長遂黍。
從用戶側(cè)看:因?yàn)槎囗搼?yīng)用的頻繁刷新终佛,新的URL都需要頁面重載。單一頁面會(huì)觸發(fā)多個(gè)HTTP請(qǐng)求(靜態(tài)資源雾家、Ajax)铃彰。這兩個(gè)因素導(dǎo)致用戶等待時(shí)間過久。
從開發(fā)人員側(cè)看:1)開發(fā)者往往熱衷于新技術(shù)芯咧。學(xué)習(xí)新技術(shù)不僅有利于團(tuán)隊(duì)技術(shù)成長牙捉,也有利于發(fā)揮成員的積極性。2)團(tuán)隊(duì)成員本身具有全棧開發(fā)的能力敬飒,轉(zhuǎn)換成前后端分離的模式成本較低邪铲。
從業(yè)務(wù)本身來看:產(chǎn)品天生適合采用單頁應(yīng)用,無需SEO无拗。
2带到、在以前傳統(tǒng)的網(wǎng)站開發(fā)中,前端一般扮演的只是切圖的工作英染,只是簡單地將UI設(shè)計(jì)師提供的原型圖實(shí)現(xiàn)成靜態(tài)的HTML頁面揽惹,而具體的頁面交互邏輯被饿,比如與后臺(tái)的數(shù)據(jù)交互工作等,可能都是由后臺(tái)的開發(fā)人員來實(shí)現(xiàn)的搪搏,或者是前端是緊緊的耦合后臺(tái)狭握。比如,以前淘寶的Web基本上都是基于MVC框架webx疯溺,架構(gòu)決定了前端只能依賴后端论颅。所以他們的開發(fā)模式依然是,前端寫好靜態(tài)demo囱嫩,后端翻譯成VM模版恃疯,這種模式的問題就不說了,被吐槽了很久挠说。
而且更有可能后臺(tái)人員直接兼顧前端的工作澡谭,一邊實(shí)現(xiàn)API接口,一邊開發(fā)頁面损俭,兩者互相切換著做蛙奖,而且根據(jù)不同的url動(dòng)態(tài)拼接頁面,這也導(dǎo)致后臺(tái)的開發(fā)壓力大大增加杆兵。前后端工作分配不均雁仲。不僅僅開發(fā)效率慢,而且代碼難以維護(hù)琐脏。而前后端分離的話攒砖,則可以很好的解決前后端分工不均的問題,將更多的交互邏輯分配給前端來處理日裙,而后端則可以專注于其本職工作吹艇,比如提供API接口,進(jìn)行權(quán)限控制以及進(jìn)行運(yùn)算工作昂拂。而前端開發(fā)人員則可以利用nodejs來搭建自己的本地服務(wù)器受神,直接在本地開發(fā),然后通過一些插件來將api請(qǐng)求轉(zhuǎn)發(fā)到后臺(tái)格侯,這樣就可以完全模擬線上的場(chǎng)景鼻听,并且與后臺(tái)解耦。前端可以獨(dú)立完成與用戶交互的整一個(gè)過程联四,兩者都可以同時(shí)開工撑碴,不互相依賴,開發(fā)效率更快朝墩,而且分工比較均衡醉拓。
二、前端方案選型
在前端方案的落地中,團(tuán)隊(duì)花費(fèi)了很長時(shí)間進(jìn)行框架的預(yù)研廉嚼,最終選擇了Vue玫镐。對(duì)業(yè)務(wù)而言,框架需要提供雙向數(shù)據(jù)綁定怠噪、模版引擎、組件化杜跷、前端路由傍念,還有能與jQuery組件進(jìn)行通信,定制化程度較高葛闷。
React意味著全局替換憋槐,替換成本過高,成果成型慢
JSX淑趾、TS對(duì)偏后臺(tái)同學(xué)而言阳仔,學(xué)習(xí)門檻較高
在國內(nèi)Vue顯然更受歡迎,文檔扣泊、社區(qū)也更活躍
React許可協(xié)議的具有潛在的不可控性
前端同學(xué)對(duì)Vue理解更深刻