前后端分離與不分離的區別,兩者的優勢


前后端不分離:
      在前后端不分離的應用模式中,前端頁面看到的效果都是由后端控制,由后端渲染頁面或重定向,也就是后端需要控制前端的展示,前端與后端的耦合度很高。
       這種應用模式比較適合純網頁應用,但是當后端對接App時,App可能並不需要后端返回一個HTML網頁,二僅僅時數據本身,所以后端原本返回網頁的接口不再適用於前端App應用,為了對接App,后端還需要再開發一套接口。
 
請求的數據交互如下圖:
 
 
 
前后端分離
      在前后端分離的應用模式中,后端僅返回前端所需的數據,不再渲染HTML頁面,不再控制前端的效果,至於前端用戶看到的什么效果,從后端請求的數據如何加載到前端中,都由前端自己決定,網頁有網頁的處理方式,App由App的處理方式,但如論那種前端,所需要的數據基本相同,后端僅需開發一套邏輯對外提供數據即可。
 
       在前后端分開的應用模式中,前端與后端的耦合度相對較低。
 
       在前后端分離的應用模式中,我們通常將后端開發的每一個視圖都稱為一個接口,或者API,前端通過訪問接口來對數據進行增刪改查。
 
對應的數據交互如下:
 
 
1、開發人員分離
 
  以前的JavaWeb項目大多時后端做,既搞前端,又搞后端。后來越來越多的公司開始吧前后端的界限分的越來越明確,前端工程師只搞前端的事,后端工程師只搞后端的事。
1)后端追求的是:三高(高並發,高可用,高性能),安全,存儲,業務等。
 
2)對於前端工程師:
 
  把精力放在html5,css3,jquery,angliarjs,bootstrap、reactjs,vuejs,微博pack,less/sass,gulp,nodejs,Google V8引擎,javascripts多線程,模塊化,面向對象編程,設計模式,瀏覽器兼容性,性能優化等。
 
前端追求的是:頁面表現,速度流暢,兼容性,用戶體驗
 
2、開發模式(后端以JAVA為例)
 
以前的方式:
 
1)產品經理/領導/客戶提出需求
2)UI做出設計圖
3)前端工程師做HTML頁面
4)后端工程師將HTML頁面套成jsp頁面(前后端強依賴,后端必須要等前端的HTML做好才能套jsp。如果html發生變更,就更痛了,開發效率低)
5)集成出現問題
6)前端返工
7)后端返工
8)二次集成
9)集成成功
10)交付
 
新的方式是:
 
1)產品經理/領導/客戶提出需求
2)UI做出設計圖
3)前后端約定接口&數據&參數
4)前后端並行開發(無強依賴,可前后端並行開發,如果需求變更,只要接口&參數不變,就不用兩邊都改代碼,開發效率高)
5)前后端集成
6)前端頁面調整
7)集成成功
8)交付
 
3、請求方式
前老的方式:
1)客戶端請求
2)服務端的servlet或controller接收請求(后端控制路由與渲染頁面,整個項目開發的權重大部分在后端)
3)調整service,dao代碼完成業務邏輯
4)返回jsp
5)jsp展現一些動態的代碼
 
新的老的方式:
1)瀏覽器發送請求
2)直接到達html頁面(前端控制路由與渲染頁面,整個項目開發的權重前移)
3)html頁面負責調用服務端接口產生數據(通過ajax等等,后台返回json格式數據,json數據格式因為簡潔高效而取代xml)
4)填充html,展現動態效果,在頁面上進行解析並操作DOM。
 
 
4、前后端分離的優勢
 
1)可以實現真正的前后端解耦,前端服務器使用nginx,前端/web服務器放的是css,js,圖片等一系列靜態資源(甚至你可以將css,教js,圖片等資源放在特定的文件服務器,例如阿里雲的oss,並使用cdn加速),前端服務器腹足鱷控制頁面引用&跳轉&路由,前端頁面異步調用后端的接口,后端/應用服務器使用toomcat(把tomcat想象成一個數據提供者),加快整體響應速度。(這里需要使用一些前端工程化的框架,比如nodejs,react,router,redux,webpack)
2)發生bug,可以快速定位是誰的問題,不會出現互相踢皮球的現象。頁面邏輯,跳轉錯誤,瀏覽器兼容性問題,腳本問題,頁面樣式問題,全部由前端工程師負責。接口數據出錯,數據沒有提交成功,應答超時等問題,全部由后端工程師來解決。雙方互不干擾。
3)在大並發情況下,可以同時水平擴展前后端服務器
4)減少后端服務器的兵法/負載壓力。處理接口以外的其他所有http輕輕全部轉移到前端nginx上,接口的請求調用tomcat,參考nginx反響帶來tomcat。且除了第一次頁面請求外,瀏覽器會大量調用本地緩存
5)即使后端服務暫時超時,前端頁面也會正常訪問,只是數據刷不出來。
6)頁面顯示的東西再多也不怕,因為是異步加載
7)nginx支持頁面熱部署,不用重啟服務器,前端升級更無縫。
8)增加代碼的維護性&易讀性(前后端耦合在一起的代碼讀起來相當費勁)
9)提升開發效率,因為可以前后端並行開發,而不是像以前的強依賴。
10)在nginx中部署證書,外網使用https訪問,並且只開放443和80端口,其他端口一律關閉(防止黑客口掃描),內網使用http,性能和安全都有保障。
11)前端使用大量的組件代碼得以復用,組件化,提升開發效率。
 
 
 
 
文章來源:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM