一丶爲何要實現先後端分離:先後端分離有什麼好處前端
按照項目開發來講:web
1.實現先後端分離可使 項目更快的研發完成,後端
2.加快了項目的時間api
傳統開發形式:瀏覽器
先後端分離開發:性能優化
在開發階段,當有新的需求時,先後端工程師約定好接口數據格式,就能夠並行進行開發測試了,前端工程師沒必要等待後端的接口開發好了纔開始工做,能夠利用mock假數據等方式模擬接口返回數據(固然還有其餘方式),先後端都開發好以後雙方再進行聯調,測試,發現問題及時修復,從而保證項目的正常完成。服務器
1.前端代碼再也不耦合後端代碼,完全解放前端前端工程師
2.先後端能夠按照約定好的數據格式同時進行開發,極大地提高了開發效率架構
3.發現問題以後也能夠快速定位到問題。若是是接口的問題,則後端工程師來修復,若是是頁面問題,則由前端工程師來修復,也下降了維護成本負載均衡
4.能夠應對複雜多變的需求,一套API能夠用於不一樣的應用
先後端分離能夠從四個方面理解:
1.交互形式
2.代碼組織方式
3,開發模式
4.數據接口規範流程
在先後端分離架構中,後端只是負責按照約定的數據格式向前段提供可調用的api服務便可,先後端之間經過http請求進行交互,前段獲取數據以後,進行頁面的組裝和渲染,最終返回給瀏覽器.
在傳統架構模式中,先後端代碼存放於同一個代碼庫中,甚至是同一工程目錄下。頁面中還夾雜着後端代碼。先後端工程師進行開發時,都必須把整個項目導入到開發工具中。
而先後端分離模式在代碼組織形式上有如下兩種:
1.半分離
先後端共用一個代碼庫,可是代碼分別存放在兩個工程中。後端不關心或不多 關心前端元素的輸出狀況,前端不能獨立進行開發和測試,項目中缺少先後端 交互的測試用例。
2.分離
先後端代碼庫分離,前端代碼中有能夠進行Mock測試(經過構造虛擬測試對 象以簡化測試環境的方法)的僞後端,能支持前端的獨立開發和測試。然後端 代碼中除了功能實現外,還有着詳細的測試用例,以保證API的可用性,下降 集成風險。
分離以後的4大優勢:
爲優質產品打造精益團隊
經過將開發團隊先後端分離化,讓先後端工程師只須要專一於前端或後端的開發工做,是的先後端工程師實現自治,培養其獨特的技術特性,而後構建出一個全棧式的精益開發團隊。
提高開發效率
先後端分離之後,能夠實現先後端代碼的解耦,只要先後端溝通約定好應用所需接口以及接口參數,即可以開始並行開發,無需等待對方的開發工做結束。與此同時,即便需求發生變動,只要接口與數據格式不變,後端開發人員就不須要修改代碼,只要前端進行變更便可。如此一來整個應用的開發效率必然會有質的提高。
完美應對複雜多變的前端需求
若是開發團隊能完成先後端分離的轉型,打造優秀的先後端團隊,開發獨立化,讓開發人員作到專一專精,開發能力必然會有所提高,可以完美應對各類複雜多變的前端需求。
加強代碼可維護性
先後端分離後,應用的代碼再也不是先後端混合,只有在運行期纔會有調用依賴關係。
應用代碼將會變得整潔清晰,不管是代碼閱讀仍是代碼維護都會比之前輕鬆。
任何一項技術以及架構都不是適用於任何場景,先後端分離一樣也是如此。雖然先後端分離架構能帶來許多的好處,但前提是創建在開發團隊合適的基礎上的。
而咱們百度網盤就屬於那種:
頁面佈局複雜,使用了主題和樣式。
須要有較高的頁面渲染效果
前端頁面中包含複雜業務邏輯
頁面須要渲染的數據量較大
像這種重前端
的應用咱們綜合考慮了各類狀況,最終決定採用先後端分離架構。
先後端分離以後,應用在部署時也須要進行先後端分離。在進行先後端分離方案選擇時,須要結合項目的實際狀況和用戶來考慮
先後端分離以前,網盤的後端架構是Nginx服務和後端的PHP服務以及前端的靜態資源都是部署在同一臺服務器上。當瀏覽器發起訪問請求時,如何請求的是靜態資源,Nginx直接把靜態資源返回給服務器;若是請求的是頁面或後端服務,則經Nginx將請求轉發到後端的PHP服務器,完成響應後經Nginx返回到瀏覽器。
這個方案比較簡單,易於實現,並且能到達先後端解耦的目的。並且不少公司目前都是基於這種架構或者必定的變形來實現的web應用。
可是對於頁面量比較大,須要有良好SEO的應用來講,此方案缺點也較爲明顯。由於 Nginx只是向瀏覽器返回頁面靜態資源,而國內的搜索引擎爬蟲只會抓取靜態數據, 不會解析頁面中的js,這使得應用得不到良好的搜索引擎支持。同時由於Nginx不會進行頁面的組裝渲染,須要把靜態頁面返回到瀏覽器,而後完成渲染工做,這加劇了瀏覽器的渲染負擔。
另外,因爲這種架構使得前端工程師的工做範圍只侷限在了瀏覽器一側,致使在進行一些特殊的性能優化時,前端工程師沒法獨立完成,還須要後端開發人員的配合,這也必定程度上影響了雙方的進度。
先後端分離以後,咱們在原先的架構只上再單獨增長了一個Node Server做爲中間層,將前端資源部署到Node Server中。Node Server還實現了一層數據代理服務,負責與提供數據的後端服務進行通訊。
而且還在這個基礎上增長並使用了前端機(前端機是對全部的請求進行預處理和負載均衡,而後再轉發給後端機。)的Nginx服務,瀏覽器發起的請求通過前端機的Nginx進行分發,URL請求統一分發到Node Server,在Node Server中根據請求類型從後端服務器上經過RPC服務請求頁面的模板數據,而後進行頁面的組裝和渲染;API請求則直接轉發到後端服務器,完成響應。