先後端分離

一丶爲何要實現先後端分離:先後端分離有什麼好處前端

按照項目開發來講:web

1.實現先後端分離可使 項目更快的研發完成,後端

2.加快了項目的時間api

傳統開發形式:瀏覽器

 

先後端分離開發:性能優化

在開發階段,當有新的需求時,先後端工程師約定好接口數據格式,就能夠並行進行開發測試了,前端工程師沒必要等待後端的接口開發好了纔開始工做,能夠利用mock假數據等方式模擬接口返回數據(固然還有其餘方式),先後端都開發好以後雙方再進行聯調,測試,發現問題及時修復,從而保證項目的正常完成。服務器

1.前端代碼再也不耦合後端代碼,完全解放前端前端工程師

2.先後端能夠按照約定好的數據格式同時進行開發,極大地提高了開發效率架構

3.發現問題以後也能夠快速定位到問題。若是是接口的問題,則後端工程師來修復,若是是頁面問題,則由前端工程師來修復,也下降了維護成本負載均衡

4.能夠應對複雜多變的需求,一套API能夠用於不一樣的應用

 

 

先後端分離能夠從四個方面理解:

1.交互形式

2.代碼組織方式

3,開發模式

4.數據接口規範流程

在先後端分離架構中,後端只是負責按照約定的數據格式向前段提供可調用的api服務便可,先後端之間經過http請求進行交互,前段獲取數據以後,進行頁面的組裝和渲染,最終返回給瀏覽器.

在傳統架構模式中,先後端代碼存放於同一個代碼庫中,甚至是同一工程目錄下。頁面中還夾雜着後端代碼。先後端工程師進行開發時,都必須把整個項目導入到開發工具中。

而先後端分離模式在代碼組織形式上有如下兩種:

1.半分離

先後端共用一個代碼庫,可是代碼分別存放在兩個工程中。後端不關心或不多 關心前端元素的輸出狀況,前端不能獨立進行開發和測試,項目中缺少先後端 交互的測試用例。

2.分離

先後端代碼庫分離,前端代碼中有能夠進行Mock測試(經過構造虛擬測試對 象以簡化測試環境的方法)的僞後端,能支持前端的獨立開發和測試。然後端 代碼中除了功能實現外,還有着詳細的測試用例,以保證API的可用性,下降 集成風險。

分離以後的4大優勢:

 

  • 爲優質產品打造精益團隊
    經過將開發團隊先後端分離化,讓先後端工程師只須要專一於前端或後端的開發工做,是的先後端工程師實現自治,培養其獨特的技術特性,而後構建出一個全棧式的精益開發團隊。

  • 提高開發效率
    先後端分離之後,能夠實現先後端代碼的解耦,只要先後端溝通約定好應用所需接口以及接口參數,即可以開始並行開發,無需等待對方的開發工做結束。與此同時,即便需求發生變動,只要接口與數據格式不變,後端開發人員就不須要修改代碼,只要前端進行變更便可。如此一來整個應用的開發效率必然會有質的提高。

  • 完美應對複雜多變的前端需求
    若是開發團隊能完成先後端分離的轉型,打造優秀的先後端團隊,開發獨立化,讓開發人員作到專一專精,開發能力必然會有所提高,可以完美應對各類複雜多變的前端需求。

  • 加強代碼可維護性
    先後端分離後,應用的代碼再也不是先後端混合,只有在運行期纔會有調用依賴關係。

 

應用代碼將會變得整潔清晰,不管是代碼閱讀仍是代碼維護都會比之前輕鬆。

須要進行先後端分離的場景

任何一項技術以及架構都不是適用於任何場景,先後端分離一樣也是如此。雖然先後端分離架構能帶來許多的好處,但前提是創建在開發團隊合適的基礎上的。

而咱們百度網盤就屬於那種:

  1. 頁面佈局複雜,使用了主題和樣式。

  2. 須要有較高的頁面渲染效果

  3. 前端頁面中包含複雜業務邏輯

  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請求則直接轉發到後端服務器,完成響應。

相關文章
相關標籤/搜索