JavaWeb項(xiàng)目為什么我們要放棄jsp接奈?為什么要前后端解耦?為什么要前后端分離通孽?2.0版序宦,為分布式架構(gòu)打基礎(chǔ)。
分離原因:
一背苦、術(shù)業(yè)有專攻
后端工程師可以只管后端的事情互捌,而不用自己寫前端。
對(duì)于后端java工程師:
把精力放在java基礎(chǔ)行剂,設(shè)計(jì)模式秕噪,jvm原理,spring+springmvc原理及源碼厚宰,linux腌巾,mysql事務(wù)隔離與鎖機(jī)制,mongodb铲觉,http/tcp壤躲,多線程,分布式架構(gòu)(dubbo备燃,dubbox,spring cloud)凌唬,彈性計(jì)算架構(gòu)并齐,微服務(wù)架構(gòu)(springboot+zookeeper+docker+jenkins),java性能優(yōu)化客税,以及相關(guān)的項(xiàng)目管理等等况褪。
后端追求的是:三高(高并發(fā),高可用更耻,高性能)测垛,安全,存儲(chǔ)秧均,業(yè)務(wù)等等食侮。
對(duì)于前端工程師:
把精力放在html5,css3目胡,jquery锯七,angularjs,bootstrap誉己,reactjs眉尸,vuejs,webpack,less/sass噪猾,gulp霉祸,nodejs,Google V8引擎袱蜡,javascript多線程丝蹭,模塊化,面向切面編程戒劫,設(shè)計(jì)模式半夷,瀏覽器兼容性,性能優(yōu)化等等迅细。
前端追求的是:頁(yè)面表現(xiàn)巫橄,速度流暢,兼容性茵典,用戶體驗(yàn)等等湘换。
二、耦合性強(qiáng)统阿,JSP痛點(diǎn)
1彩倚、動(dòng)態(tài)資源和靜態(tài)資源全部耦合在一起,服務(wù)器壓力大扶平,JSP必須要在支持java的web服務(wù)器里運(yùn)行(例如tomcat帆离,jetty,resin等)结澄,無(wú)法使用nginx哥谷。
2、UI出好設(shè)計(jì)圖后麻献,前端工程師只負(fù)責(zé)將設(shè)計(jì)圖切成html们妥,需要由java工程師來將html套成jsp頁(yè)面,出錯(cuò)率較高(因?yàn)轫?yè)面中經(jīng)常會(huì)出現(xiàn)大量的js代碼)勉吻,修改問題時(shí)需要雙方協(xié)同開發(fā)监婶,效率低下。
3齿桃、第一次請(qǐng)求JSP惑惶,需要先在服務(wù)器中編譯成SERVLET,再通過輸出流輸出HTML短纵,效率較低集惋。
分離優(yōu)勢(shì):
一、前后端解耦踩娘,NGINX+TOMCAT
二刮刑、快速定位BUG
三喉祭、在大并發(fā)情況下,可以同時(shí)水平擴(kuò)展前后端服務(wù)器
四雷绢、減少后端服務(wù)器的并發(fā)/負(fù)載壓力
五泛烙、即使后端服務(wù)暫時(shí)超時(shí)或者宕機(jī)了,前端頁(yè)面也會(huì)正常訪問翘紊,只不過數(shù)據(jù)刷不出來而已蔽氨。
六、后端接口可以復(fù)用
七帆疟、AJAX異步加載鹉究,速度快
八、即使后端服務(wù)暫時(shí)超時(shí)或者宕機(jī)了踪宠,前端頁(yè)面也會(huì)正常訪問自赔,只不過數(shù)據(jù)刷不出來而已。
九柳琢、增加代碼的維護(hù)性和易讀性绍妨,提升開發(fā)效率
總結(jié)
前后端分離并非僅僅只是一種開發(fā)模式,而是一種架構(gòu)模式(前后端分離架構(gòu))柬脸。
需要區(qū)分前后端項(xiàng)目他去,放在兩個(gè)不同的服務(wù)器,需要獨(dú)立部署倒堕,兩個(gè)不同的工程灾测,兩個(gè)不同的代碼庫(kù),不同的開發(fā)人員垦巴。
前后端工程師需要約定交互接口媳搪,實(shí)現(xiàn)并行開發(fā),開發(fā)結(jié)束后需要進(jìn)行獨(dú)立部署魂那,前端通過ajax來調(diào)用http請(qǐng)求調(diào)用后端的restful api。
前端只需要關(guān)注頁(yè)面的樣式與動(dòng)態(tài)數(shù)據(jù)的解析&渲染稠项,而后端專注于具體業(yè)務(wù)邏輯涯雅。