前端 MVC 和伺服器端有哪些差別?

比如 Backbone 和 Rails 或者 Flask 之類的開源框架...

瀏覽器端使用 MVC 和伺服器端一樣得合適么?


伺服器端的MVC,每次用戶幹了什麼,流程大致是這樣的:

客戶端發送請求 -&> 伺服器觸發Controller -&> 伺服器進行Model各種操作 -&> 伺服器根據Model數據渲染View -&> 伺服器回復請求,包含了整個View的html -&> 客戶端重新渲染整個頁面,所有的css都又計算了一遍,所有的js都重新執行了一遍,所有的資源都重新請求了一遍(雖然可能已經cache了)

前端MVC的話則是這樣的(前端其實大部分是MV+X,不一定有Controller):

客戶端根據用戶的行為修改客戶端Model -&> 客戶端更新和該Model相關的View -&> 客戶端Model發送sync請求到伺服器,只包含改變了哪些數據 -&> 伺服器審核數據改動是否合法,只需回復是否修改成功 -&> 客戶端收到成功,什麼都不用做;不成功,則把剛才改的View改回來,然後通知用戶。(當然,也可以在客戶端的Model裡面也加入審核機制,這樣對不合法數據的反應更快,但還是得保留伺服器端的審核)

比較一下可以看到,前端MVC需要向伺服器端傳遞和接收的數據量都少很多,而前端要做的等待和渲染工作也少了很多。換言之,會提供更快的交互反饋,也意味著更好的用戶體驗。同時,伺服器端的負載也略有降低,因為基本上只需要在資料庫上提供一個RESTful API即可。


只要涉及到數據-邏輯-顯示,都可以用MVC的設計理念!就前端而言,數據層可能是ajax拿到的數據,也可以是來自頁面! 視圖就是dom,邏輯層當然就是JS!看你怎麼使用了!


在於MC在哪裡處理,伺服器端的MVC可以直接生成響應的頁面,

而前端MVC則需要JS生成相關內容,其中 M的數據要通過ajax在伺服器上拉取,C的邏輯代碼則存放在JS中.


MVC pattern, 嚴格意義上說瀏覽器上只應有 VC, 而伺服器端只應有 MC。domain knowledge 不應該出現在前段


推薦閱讀:

TAG:前端開發 | JavaScript | MVC | Backbonejs |