????近期由于各種事情一直困擾于我浴井,我很頭大。首先聞道有先后霉撵,術(shù)業(yè)有專攻磺浙。我始終認(rèn)為每個人都是有自己的強(qiáng)項,即使起步不是該行業(yè)或者說是該崗位徒坡,當(dāng)你處于該職位一定時期之后撕氧,勢必能成為該崗位的專家。既當(dāng)?shù)之?dāng)媽的真的不適合技術(shù)崗位喇完,應(yīng)該屬管理呵曹。我實在鬧不懂為什么會有讓前后端混在一起的存在。翻遍各大網(wǎng)站查閱資料實在找不到一個可以說服我的理由。如果說有我覺得是對目光短淺這所謂的節(jié)約成本奄喂,經(jīng)此而已铐殃。
? ??閑話少說,步入正題跨新。今天我想說的是從一個產(chǎn)品經(jīng)理的角度來說開發(fā)前后端分離的事情富腊。為什么要從產(chǎn)品經(jīng)理的角度來說,設(shè)計一個功能的時候大致流程是這樣的:
產(chǎn)品提出需求---設(shè)計介入設(shè)計出圖---然后召集各端開發(fā)人員串講需求---各端開發(fā)討論并約定接口域帐、數(shù)據(jù)赘被、參數(shù)---各端開始開發(fā)---前后端集成---測試介入第一輪測試---產(chǎn)品驗收--設(shè)計驗收--測試最終測試--交付
????從流程可以看出,產(chǎn)品在整個過程中從最初需求設(shè)計肖揣、跟蹤開發(fā)和測試民假、驗收產(chǎn)品等各個環(huán)節(jié)起著決定性的地位,也就是說龙优,產(chǎn)品的功能和邏輯取決于產(chǎn)品經(jīng)理對該產(chǎn)品的設(shè)計羊异。如果前后端不分離,人員溝通起來費時費力不說很難達(dá)到最初產(chǎn)品設(shè)計的預(yù)期彤断。前后端分離并非僅僅只是一種開發(fā)模式野舶,而是一種架構(gòu)模式(前后端分離架構(gòu))。并不是在擼代碼的時候把前端和后端分開就是前后端分離了宰衙,需要區(qū)分前后端項目平道。前端項目與后端項目是兩個項目,放在兩個不同的服務(wù)器供炼,需要獨立部署一屋,兩個不同的工程,兩個不同的代碼庫袋哼,不同的開發(fā)人員冀墨。好一點效果后端人員跟著產(chǎn)品經(jīng)理和UI各種調(diào)整布局,但是絕大部分先嬉,我可以說99%的不分離都是利用各種框架而成。導(dǎo)致的結(jié)果就是按照設(shè)計稿楚堤,按照需求做不出來疫蔓,對做不出來。即使做得出來身冬,這位開發(fā)同仁絕逼會讓你逼瘋衅胀。
????后期想跟新和維護(hù)就更難了,這種情況大多數(shù)出現(xiàn)在后臺開發(fā)中酥筝,比如CRM滚躯、CMS中。因為做不出來,實現(xiàn)不了的結(jié)果就是產(chǎn)品跟著開發(fā)轉(zhuǎn)掸掏,想辦法去實現(xiàn)茁影。而是用這則處于崩潰邊緣。應(yīng)為這些系統(tǒng)對應(yīng)的工作大多是枯燥而繁雜的丧凤。一不小心出錯募闲,倒是就是各種撕逼踢皮球。這又是何必呢愿待?
????社科院工業(yè)經(jīng)濟(jì)研究所張金昌教授發(fā)表的一篇文章《管理智能化:理論創(chuàng)新與技術(shù)創(chuàng)新》浩螺,當(dāng)我看到這篇文章的時候讓我更加感到當(dāng)前大多數(shù)企業(yè)嘴上說提高效率,而實際讓后臺管理處于開發(fā)容易使用難的地步仍侥。智能化管理都已經(jīng)提上日程要出,企業(yè)中還是為難了后臺管理者。這不是提效是湊合农渊、是嘴上節(jié)約成本而實際在提高成本患蹂。
????前后端分離有哪些優(yōu)勢呢?我摘錄了一些腿时,我覺著挺全面的
1况脆、可以實現(xiàn)真正的前后端解耦,前端服務(wù)器使用nginx批糟。前端/WEB服務(wù)器放的是css格了,js,圖片等等一系列靜態(tài)資源(甚至你還可以css徽鼎,js盛末,圖片等資源放到特定的文件服務(wù)器,例如阿里云的oss否淤,并使用cdn加速)悄但,前端服務(wù)器負(fù)責(zé)控制頁面引用&跳轉(zhuǎn)&路由,前端頁面異步調(diào)用后端的接口石抡,后端/應(yīng)用服務(wù)器使用tomcat(把tomcat想象成一個數(shù)據(jù)提供者)檐嚣,加快整體響應(yīng)速度。(這里需要使用一些前端工程化的框架比如nodejs啰扛,react嚎京,router,react隐解,redux鞍帝,webpack)
2、發(fā)現(xiàn)bug煞茫,可以快速定位是誰的問題帕涌,不會出現(xiàn)互相踢皮球的現(xiàn)象摄凡。頁面邏輯,跳轉(zhuǎn)錯誤蚓曼,瀏覽器兼容性問題亲澡,腳本錯誤,頁面樣式等問題辟躏,全部由前端工程師來負(fù)責(zé)谷扣。接口數(shù)據(jù)出錯,數(shù)據(jù)沒有提交成功捎琐,應(yīng)答超時等問題会涎,全部由后端工程師來解決。雙方互不干擾瑞凑,前端與后端是相親相愛的一家人
3末秃、在大并發(fā)情況下,我可以同時水平擴(kuò)展前后端服務(wù)器籽御,比如淘寶的一個首頁就需要2000+臺前端服務(wù)器做集群來抗住日均多少億+的日均pv练慕。(去參加阿里的技術(shù)峰會,聽他們說他們的web容器都是自己寫的技掏,就算他單實例抗10萬http并發(fā)铃将,2000臺是2億http并發(fā),并且他們還可以根據(jù)預(yù)知洪峰來無限拓展哑梳,很恐怖劲阎,就一個首頁。鸠真。悯仙。)
4、減少后端服務(wù)器的并發(fā)/負(fù)載壓力吠卷。除了接口以外的其他所有http請求全部轉(zhuǎn)移到前端nginx上锡垄,接口的請求調(diào)用tomcat,參考nginx反向代理tomcat祭隔。且除了第一次頁面請求外货岭,瀏覽器會大量調(diào)用本地緩存。
5疾渴、即使后端服務(wù)暫時超時或者宕機(jī)了千贯,前端頁面也會正常訪問,只不過數(shù)據(jù)刷不出來而已程奠。
6丈牢、也許你也需要有微信相關(guān)的輕應(yīng)用祭钉,那樣你的接口完全可以共用瞄沙,如果也有app相關(guān)的服務(wù),那么只要通過一些代碼重構(gòu),也可以大量復(fù)用接口距境,提升效率申尼。(多端應(yīng)用)
7、頁面顯示的東西再多也不怕垫桂,因為是異步加載师幕。
8、nginx支持頁面熱部署诬滩,不用重啟服務(wù)器霹粥,前端升級更無縫。
9疼鸟、增加代碼的維護(hù)性&易讀性(前后端耦在一起的代碼讀起來相當(dāng)費勁)后控。
10、提升開發(fā)效率空镜,因為可以前后端并行開發(fā)浩淘,而不是像以前的強(qiáng)依賴。
11吴攒、在nginx中部署證書张抄,外網(wǎng)使用https訪問,并且只開放443和80端口洼怔,其他端口一律關(guān)閉(防止黑客端口掃描)署惯,內(nèi)網(wǎng)使用http,性能和安全都有保障茴厉。
12泽台、前端大量的組件代碼得以復(fù)用,組件化矾缓,提升開發(fā)效率怀酷,抽出來!
注意事項
1嗜闻、在開需求會議的時候蜕依,前后端工程師必須全部參加,并且需要制定好接口文檔琉雳,后端工程師要寫好測試用例(2個維度)样眠,不要讓前端工程師充當(dāng)你的專職測試,推薦使用chrome的插件postman或soapui或jmeter翠肘,service層的測試用例拿junit寫檐束。ps:前端也可以玩單元測試嗎?
2束倍、上述的接口并不是java里的interface被丧,說白了調(diào)用接口就是調(diào)用你controler里的方法盟戏。
3、加重了前端團(tuán)隊的工作量甥桂,減輕了后端團(tuán)隊的工作量柿究,提高了性能和可擴(kuò)展性。
4黄选、我們需要一些前端的框架來解決類似于頁面嵌套蝇摸,分頁,頁面跳轉(zhuǎn)控制等功能办陷。(上面提到的那些前端框架)貌夕。
5、如果你的項目很小民镜,或者是一個單純的內(nèi)網(wǎng)項目蜂嗽,那你大可放心,不用任何架構(gòu)而言殃恒,但是如果你的項目是外網(wǎng)項目植旧,呵呵噠。
6离唐、?以前還有人在使用類似于velocity/freemarker等模板框架來生成靜態(tài)頁面病附,仁者見仁智者見智。
7亥鬓、這篇文章主要的目的是說jsp在大型外網(wǎng)java web項目中被淘汰掉完沪,可沒說jsp可以完全不學(xué),對于一些學(xué)生朋友來說嵌戈,jsp/servlet等相關(guān)的java web基礎(chǔ)還是要掌握牢的覆积,不然你以為springmvc這種框架是基于什么來寫的?
8熟呛、如果頁面上有一些權(quán)限等等相關(guān)的校驗宽档,那么這些相關(guān)的數(shù)據(jù)也可以通過ajax從接口里拿。
9庵朝、對于既可以前端做也可以后端做的邏輯吗冤,我建議是放到前端,為什么九府?因為你的邏輯需要計算資源進(jìn)行計算椎瘟,如果放到后端去run邏輯,則會消耗帶寬&內(nèi)存&cpu等等計算資源侄旬,你要記住一點就是服務(wù)端的計算資源是有限的肺蔚,而如果放到前端,使用的是客戶端的計算資源儡羔,這樣你的服務(wù)端負(fù)載就會下降(高并發(fā)場景)宣羊。類似于數(shù)據(jù)校驗這種声旺,前后端都需要做!
10段只、前端需要有機(jī)制應(yīng)對后端請求超時以及后端服務(wù)宕機(jī)的情況,友好的展示給用戶鉴扫。
最后我真的希望從提效的角度出發(fā)赞枕,從一個產(chǎn)品經(jīng)理的角度呼吁,后臺開發(fā)請前后端分離坪创。別湊合