Google Code Prettify

前端 MVC 框架

前端獲取 JSON 數據作為 Model,那麼 MVC 中的 View 和 Controller 又各自在前端扮演什麼角色呢?這就需要一套完整的框架作為解決方案了。現在市面上流行的前端 MVC 框架大概有下面幾種

  • Backbone.js. 應該是比較早出現的一個框架了,風靡於 Ruby on Rails 社區,包括 LinkedIn, Hulu, WordPress.com, Foursquare, Bitbucket, Disqus, Groupon, Basecamp, Pandora 以及國內的豆瓣,雪球,很多網站都使用了它,加上有 37signal 的背景,可謂是頗有知名度。它比較輕量,性能不錯,但正因為如此導致它缺失了很多前端需要的重要組件,你必須自己寫很多代碼來實現,隨着應用越來越複雜,要在更深層次嵌入視圖,惡夢 開始了……另外我對它主頁的文檔展現形式有點不爽,一個腦袋裡從來沒有前端 MVC 概念的人去讀,完全不知所云。

  • Knockout. 一個很強大的 MVVM 框架,如果你是 .NET 開發者你會很熟悉這種做法。它實現了 DOM 元素和 JS model 之間的雙向綁定,也就是說你在表單中的每一個輸入,都會實時更新到 model 里,最後提交表單也就等同於更新 model 的動作,一切很順暢。官方主頁上的例子也很容易理解。

  • AngularJS. 來自 Google,項目主頁直接就是 demo,讓你直接快速上手大呼過癮。乍一看讓人覺得很簡單,不過進了門之後你會發現後面的路還很長。它製造了很多概念,對於前端來講可以說是醍醐灌頂,比如它把 unix 里的 | (管道)搬到了前端……一開始我發現 AngularJS 和 Knockout 一樣在 HTML 中寫私有屬性立即就否決了它,後來發現原來它也支持 HTML5 標準的 data-* 寫法,於是又重新愛上了它。如果你習慣 Twitter Bootstrap 的應用方式我想你也會喜歡它的。

  • Ember.js. 比較有前途的一個框架,模板很好用,開發效率首屈一指。它有很多強制性約束,可以幫你自動完成很多事情。相比 Angular 上手可能要難一點,Angular 一開始不需要這麼費勁也能做一些讓人興奮不已的事兒,而 Ember 缺少這種前期興奮點。另外最令人不爽的是 Ember 的體積,min+gzip 壓縮之後還有 55K,太龐大了。

  • Batman.js. 適合 RoR 開發,沒怎麼用過。看上去和 Knockout.js 很像,提供了自動生成代碼的一些工具。整個庫壓縮後 40K 也比較大。

  • CanJS. 也沒用過,社區規模小。


那麼,到底該選哪個框架呢?我的建議是選一個項目,去看一下各個框架的實現,誰的代碼量少,誰的結構清晰,誰的實現方式讓你感覺比較爽,自然就有答案了。這不,在 Github 上早已經有國際友人分別用各種框架實現了經典的 todo 應用,方便大家比較。就我個人而言,我選擇了 AngularJS,用 AngularJS 代替 Backbone,代碼減少了一半。雖然性能可能有點問題,但面向未來嘛,瀏覽器會越來越強大的。