前后端分離之前的事兒
以前在軟件行業(yè)谅辣,無論是JAVA工程師還是.NET程序員袄琳,都是全棧,因?yàn)閺臄?shù)據(jù)庫(kù)設(shè)計(jì)到后端接口開發(fā)杆融,再到前端頁面的搭建楞卡,全靠一個(gè)人實(shí)現(xiàn),這種好處應(yīng)該體現(xiàn)在節(jié)省勞動(dòng)力上脾歇,但是在很大程度上蒋腮,對(duì)于這些工程師來說,他們更擅長(zhǎng)后端藕各,前端技術(shù)稍微薄弱池摧,但是做項(xiàng)目和功能是沒問題的,只不過前端代碼看起來略顯得粗糙座韵。
再后來险绘,電商網(wǎng)站、P2P行業(yè)的崛起誉碴,加速了前后端分離的腳步宦棺。這也許是一個(gè)契機(jī),對(duì)于一個(gè)后端人員來說黔帕,想要實(shí)現(xiàn)炫酷的前端效果代咸,就不得不花更多的時(shí)間去研究H5或者CSS3,各種前端的模版引擎成黄。為了前端代碼可以復(fù)用呐芥,使用了各種各樣的辦法,從最開始的Copy奋岁,到組件化思瘟,模板化。這個(gè)過程發(fā)生的很迅速闻伶,但是我知道滨攻,它一定會(huì)來。
于是蓝翰,當(dāng)時(shí)作為ASP.NET女程序員的我光绕,果斷選擇了WEB前端工程師的這個(gè)行業(yè)。從而認(rèn)真的對(duì)待前端開發(fā)這件事畜份,而不僅僅是寫出來功能那么簡(jiǎn)單诞帐,需要考慮的是兼容性以及效果,還有用戶體驗(yàn)等等各個(gè)方面爆雹。
再后來停蕉,就出現(xiàn)了各大框架愕鼓,node.js、angular.js谷徙、vue.js拒啰、react.js驯绎、Flutter等等完慧。但是對(duì)于我來說,這些技術(shù)框架的出現(xiàn)剩失,更像是一次對(duì)前端工程師的洗牌屈尼,它們代表著,前后端分離時(shí)代的來臨拴孤,前后端也開始正式分家脾歧。
我們?cè)倏矗琻ode.js它在前后端之間搭起一座橋梁演熟,但是對(duì)于前端工程師來說鞭执,寫代碼,不再是 html芒粹、css兄纺、images文件夾,它的編碼環(huán)境變得更加的復(fù)雜化漆,需要使用到各種腳手架工具估脆,以及依賴。
但是技術(shù)這件事告訴我們座云,當(dāng)你習(xí)慣使用新技術(shù)時(shí)疙赠,你就不會(huì)再想去碰老的技術(shù),因?yàn)橹挥凶詈玫募夹g(shù)朦拖,才會(huì)有人使用圃阳,而最流行的一定是目前最好的。工程師們璧帝,不會(huì)去用刷流量的方式去讓技術(shù)流行起來捍岳,只有它真正的好用,才會(huì)被人使用裸弦。要不然它就會(huì)石沉大海祟同。
前后端分離
再來看今天流行起來的前后端分離技術(shù),它讓前后端分工更加明確理疙,開發(fā)效率更高晕城。但同時(shí)也更加考驗(yàn)團(tuán)隊(duì)的配合默契。從現(xiàn)在看窖贤,任何的技術(shù)都在朝著:復(fù)用性強(qiáng)砖顷、開發(fā)效率快贰锁、兼容性好的方向發(fā)展。不管是JAVA的微服務(wù)滤蝠,還是前端的組件化豌熄,都是如此。
前后端分離唯一要考慮的就是跨域服務(wù)物咳,因?yàn)榍昂蠖朔蛛x之后锣险,代碼和編碼環(huán)境都不在一起,它們本身是獨(dú)立的览闰。所以需要搭起一個(gè)中間的橋梁芯肤,讓這兩個(gè)的服務(wù)相通。
目前最常見的有:Nginx压鉴。
那么Nginx可以做什么呢崖咨?它可以做以下幾點(diǎn)事情:反向代理、負(fù)載均衡油吭、HTTP服務(wù)器(動(dòng)靜分離)击蹲、正向代理。
我們前后端分離就需要使用到它的反向代理技術(shù)婉宰。什么是反向代理呢歌豺,以下是百度百科的說法:反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器芍阎,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端世曾,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)反向代理服務(wù)器。簡(jiǎn)單來說就是真實(shí)的服務(wù)器不能直接被外部網(wǎng)絡(luò)訪問谴咸,所以需要一臺(tái)代理服務(wù)器轮听,而代理服務(wù)器能被外部網(wǎng)絡(luò)訪問的同時(shí)又跟真實(shí)服務(wù)器在同一個(gè)網(wǎng)絡(luò)環(huán)境,當(dāng)然也可能是同一臺(tái)服務(wù)器岭佳,端口不同而已血巍。
另外,我們也可以使用node.js做中間件服務(wù)珊随。由node.js做服務(wù)端和api之間的通信述寡,再將結(jié)果返給web端。這樣也可以實(shí)現(xiàn)前后端分離叶洞。
不管你用什么方式去做前后端分離鲫凶,當(dāng)你的領(lǐng)導(dǎo)問你一個(gè)項(xiàng)目需要幾個(gè)人的時(shí)候,我會(huì)告訴他衩辟,最少2個(gè)螟炫。
他問:為什么
我說:因?yàn)槲倚枰粋€(gè)前端、一個(gè)后端艺晴。
在這個(gè)技術(shù)成長(zhǎng)迅速的今天昼钻,前端工程師對(duì)于一個(gè)團(tuán)隊(duì)來說掸屡,更加至關(guān)重要。后端服務(wù)只需要開發(fā)一次然评,但是UI層需要展示的頁面仅财,卻可以千變?nèi)f化。
技術(shù)的發(fā)展和潮流將會(huì)越來越深入人心碗淌,但技術(shù)開發(fā)者盏求,卻要知道,所有的技術(shù)贯莺,它都有共通的地方风喇,所有的技術(shù)都是在發(fā)展的宁改、迭代的缕探。
我們不一定要緊跟時(shí)代的步伐,但是也不能落后的太遠(yuǎn)还蹲,我們需要做的是:不斷學(xué)習(xí)爹耗,終身成長(zhǎng)。