What?css
什麼是先後端分離?通常咱們所說的先後端分離都是說開發模式的先後端分離,部署通常也是分離的。 如今我所知道的常見的開發模式有:html
傳統的MCV模式:前端寫html,後端套界面,轉成jsp或者像freemarker,velocity,beetl(國產值得推薦)這類模板引擎。部署在一塊兒或者動靜態分離部署。前端
先後端分離的開發模式:前端寫html5,js,css3+前端MVC模式(backbone或者angular框架都不錯)+後端restful數據接口。html5
常見的先後端分離的例子就是SPA(Single-page application),全部用到的展示數據都是後端經過異步接口(AJAX/JSONP)的方式提供的,前端只管展示。css3
Why?git
爲何咱們須要先後端分離? 關於這個問題,玉伯的文章Web研發模式演變中解釋得很是全面,再大概理一下:github
1 現有開發模式的適用場景web
玉伯提到的幾種開發模式,各有各的適用場景,沒有哪種徹底取代另一種。json
好比後端爲主的MVC,作一些同步展示的業務效率很高,可是遇到同步異步結合的頁面,與後端開發溝通起來就會比較麻煩。 Ajax爲主SPA型開發模式,比較適合開發APP類型的場景,可是隻適合作APP,由於SEO等問題很差解決,對於不少類型的系統,這種開發方式也太重。後端
2 先後端職責不清
在業務邏輯複雜的系統裏,咱們最怕維護先後端混雜在一塊兒的代碼,由於沒有約束,M-V-C每一層均可能出現別的層的代碼,日積月累,徹底沒有維護性可言。 雖然先後端分離沒辦法徹底解決這種問題,可是能夠大大緩解。由於從物理層次上保證了你不可能這麼作。
3 開發效率問題
淘寶的Web基本上都是基於MVC框架webx,架構決定了前端只能依賴後端。 因此咱們的開發模式依然是,前端寫好靜態demo,後端翻譯成VM模版,這種模式的問題就不說了,被吐槽了好久。 直接基於後端環境開發也很痛苦,配置安裝使用都很麻煩。爲了解決這個問題,咱們發明了各類工具,好比VMarket,可是前端仍是要寫VM,並且依賴後端數據,效率依然不高。 另外,後端也無法擺脫對展示的強關注,從而專心於業務邏輯層的開發。
4 對前端發揮的侷限
性能優化若是隻在前端作空間很是有限,因而咱們常常須要後端合做才能碰撞出火花,但因爲後端框架限制,咱們很難使用Comet、Bigpipe等技術方案來優化性能。
怎麼作先後端分離?
怎麼作先後端分離,其實第一節中已經有了答案:
試想一下,若是前端掌握了Controller,咱們能夠作url design,咱們能夠根據場景決定在服務端同步渲染,仍是根據view層數據輸出json數據,咱們還能夠根據表現層需求很容易的作Bigpipe,Comet,Socket等等,徹底是需求決定使用方式。