參考:https://www.kancloud.cn/kancloud/midway/48192前端
前言node
隨着不一樣終端的興起,對開發人員要求愈來愈高,純瀏覽器端的響應式已經不能知足需求,咱們須要爲不一樣版本的的終端開發定製版的網頁,傳統的開發方式先後端耦合性太大,不能快速的基於前一版本開發其餘版本的頁面。爲了提升開發效率,先後端分離成爲了最好的選擇方式,前端後端分別負責不一樣的方向,前端負責展示和交互,後端負責業務和數據接口,這樣能夠減小先後端的耦合性,前端後臺經過api來交互,這樣可使前端用同一套數據接口開發出不一樣版本的系統。後端
1、先後端分離概念api
先後端分離是從職責上進行劃分,再也不是單純的物理層劃分瀏覽器
前端:負責view和controller服務器
後端:負責model層,業務處理和數據處理mvc
eg:SPA(single-page application)即爲一個先後端分離的例子,前端和後臺交互僅經過AJAX的方式交互。可是spa是經過物理層作的區分(認爲只要是客戶端就是前端,服務器端就是後臺)app
SPA存在問題前後端分離
1.SPA用的場景較少,不少場景仍是用同步異步混合的方式。異步
2.現階段的SPA開發模式,接口由後臺提供,可是有時爲了提升效率,後端幫前端處理了展示邏輯,意味着後臺處理了view層。
3.SPA方式不利於SEO(搜索引擎搜索)
2、爲何要有先後端分離
一、現有開發模式適用場景
1)之後臺爲主的mvc,作同步展示很方便,可是同步異步相結合的就很麻煩
2)Ajax爲主的SPA型,適合app類型場景開發,可是對SEO很不友好。對於稍微簡單一些的系統,用這種開發模式過於笨重
二、先後端職責不清
目前先後端職責不是很清楚,沒有約束,每一層均可能出現不屬於本層的東西,不便於維護。
三、開發效率問題
先後端揉雜在一塊兒,對前端後臺來講都是一個很大的負擔,前端不能關注到view,要了解不少後臺的語言特性,在前端代碼中穿插後臺代碼,後端無法擺脫對展示的強關注,從而專心於邏輯層開發。
四、對前端發揮侷限
由於與後臺強耦合性,前端只能在很小的空間中發揮做用,無法嘗試更新的技術。
3、如何作先後端分離
在後臺與前端view之間新加一層node來作代理。
一、爲何要加node層
1)MVC嚴重阻礙了前端開發效率,也是後臺沒法集中於業務,解決方案是讓前端來控制controller
2)前端來寫controller,若是讓前端再學一門後臺語言代價太大,node是用js開發
3)前端來代理能夠優化請求,合併請求,全部與頁面交互的接口本身控制,可以提升前端的開發效率