對框架的挑選 Ember.js、Backbone.js、Knockout.js、Spine.js、Batman.js , Angular.js
1. 輕量級的應用選擇哪個會比較好?
2. 那一個比較簡單,容易上手
3. 哪個開發週期最短?javascript
具體能夠看 (英) Rich JavaScript Applications – the Seven Frameworkshtml
Web前端開發:爲什麼選擇MVVM而非MVC前端
因爲工做關係~一直沒時間細細研究下這些框架的源碼~ 早期就看過Backbone.js與EXT4的MVCjava
最近開始研究業界小有名氣司徒正美的mvvm框架avalon git
爲何放着Angular,Ember不去分析,而去研究avalon呢, 看了http://rubylouvre.github.io/mvvm/angularjs
其實做者就是基於Angular,Ember,knockout這種成熟的框架中,演化出來的avalon,因此avalon我不說媲美這些框架,可是從研究的角度入手,我以爲未必不可github
核心的功能avalon都可以完成,只是組件不夠多,畢竟是我的行爲的 , avalon 源碼分析目錄 , 博主已經開始研究angular,儘可能同步推出源碼分析web
對比:ajax
- angular是找大而面的道路,所以體積很是龐大,1.6-1.7萬行;
- avalon旨在提供一種遠離DOM操做的前端開發體驗,0.6.3只有2420行,min只有29kb。
- avalon從angular抄來了很多好東西,如{{}}插值表達式,ms-model(經過事件實現雙向同步),ms-controller(爲了VierModel指定做用域範圍),但都作了加強,{{aaa|html}添加html過濾器就能輸出innerHTML,ms-model能夠經過data-observe來開關雙向同步,ms-controller擁有孿生兄弟ms-important。
- avalon的$watch與ms-bind方法提供比angular強大得多回調功能。
- avalon擁有像knockout, emberjs那樣的計算屬性, angular沒有。
- avalon與angular都擁有監控數組,但avalon的監控數組像knockout那樣擁有大量好用的方法,能自動同步頁面,angular的則至關弱。
- avalon與angular都擁有定義UI的功能(將一個元素變成一個UI組件),angular是使用自定義標籤,avalon是使用ms-ui屬性,但自定義標籤在舊式IE並很差使,而且可能隨着瀏覽器的升級,瀏覽器會添加一個與你如出一轍的新標籤。avalon則安全多了,而且擁有12UI組件可作參考,實現起來很是簡單。
- avalon是採起邊掃描邊轉換綁定的策略,用戶打開頁面後當即能看到效果,angular是要所有掃描後才轉換綁定,所以用戶可能看到一些奇異的模板。
- avalon是經過define方法來定義ViewModel,並有scan方法指定做用的元素與ViewModel。angular要求用戶將xxxxCtrl函數暴露到全局做用域下,框架本身去取去組裝。
- avalon在ViewModel有個$json,就是ViewModel對應的純數據的Model(ViewModel每次被操做,都會自動同步View與Model的),咱們能夠直接將它放到AJAX中使用。angular沒有獨立的Model,須要本身轉換。
- avalon是使用Object.defineProperty與VBS實現ViewModel,angular則是將整個xxxxCtrl函數進行編譯,轉換一大堆getter, setter從而實現雙向綁定,所以angular的體積是至關龐大的。
- avalon的綁定值但是ViewModel的屬性或數組或表達式, angular則容許用戶在視圖定義新變量,新對象,這是個很差的特徵,會讓頁面很是難維護。
- avalon的綁定已經強大到讓用戶徹底脫離DOM寫業務,頂可能是取一下表單元素的checked, disabled等狀態值,angular仍是傳統的思路,只是在1.0後添加數據綁定機制。
其實說了一堆,並不是是說angular不夠好avalon超過angular,正如做者所說angular是找大而面的道路,所以體積很是龐大,就跟EXT同樣想什麼都想攬着.chrome
各個框架的技術速覽
Backbone
- 做者:Jeremy Ashkenas and DocumentCloud
- 內容:
- Model-View模式,MIT 許可
- 最小的類庫——僅僅一個文件,800行代碼!
- 很專注的功能——僅僅提供REST持久化模型以及簡單的路由和回調,這樣就可讓你知道何時去渲染實體(須要本身設置渲染機制)
- 最著名的,被許多大牌網站使用(或許是由於它小而易於被接受)
- 優勢:
- 它很小,你能夠在使用以前經過讀源代碼來弄懂它。
- 對你的服務端架構和文件結構都沒有影響,能夠只在頁面的一小部分起做用,並不須要考慮整個頁面。
- Jeremy就像一個禪宗大師,對全部的問題都頗有觀點。他就像一個大人指導着一羣吵鬧的孩子。
- 項目地址:GitHub ,官網
- 發佈時間:兩年前
Meteor
- 做者:Meteor開發團隊,他們剛剛得到了1120萬美圓的融資因此能夠全職開發Meteor
- 內容:
- 這是一個來自將來世界的使人驚訝的框架,它擁有你所沒有見過的東西(可能除了Derby)
- 在服務端(Node.js + Mongo)和客戶端使用相同的代碼,使兩者(包括數據庫)連通起來.經過WebSockets來同步服務端和全部的客戶端。
- 當修改代碼時就能夠「實時部署」——客戶端會快速更新而不會丟失他們的內容。
- 若是提供視頻觀看會更加合適【演示】
- 和其餘的人同樣,我真心但願這個項目會成功——WEB開發須要一些像這樣有激情的項目來向前推動。
- 優勢:當你收購了web開發的一些陳規舊俗,Meteor可讓你走在前沿。
- 項目地址: GitHub,官網
- 發佈時間:還是早期版本,目前我不知道有哪些網站正式使用Meteor。可是它的核心團隊正在認真地作着這個項目。
Ember
- 做者: Yehuda Katz (Rails和Jquery的先前開發者),Ember團隊已經 Yehuda 的夥伴Tilede
- 內容:
- 它包含創建一個"強大的Web應用"的一切,採用的是MIT許可
- 在全部的框架中是功能最強大,固然庫的大小也很大.
- 它的着眼點在於怎樣把怎樣把一個頁面分解成一個個有層次的控件,而後經過一個有狀態的路由系統來鏈接起來.
- 正在開發更加精細的數據接入類庫(Ember.Data)
- 會在運行時對全部的頁面控制,所以對於使用了不少內容的部分(如silverlight,ajax,flash)可能不合適.
- 文件結構和URL都是固定的,可是能夠被重寫.
- 其設計靈感來自Rails和Cocoa
- 使用:它爲Rails提供工程模版(你也能夠經過手動配置來使它應用在別的服務端技術上)
- 優勢:常見的問題應該有常見的解決方法--Ember提供了全部的常看法決方案,你只須要考慮對你的應用程序來講那個是適用的.
- 項目地址GitHub,官網;
- 開始時間: 仍然不是1.0的發佈版本,不過很快會發布,API到時候也會發布(**譯者注:已經發布1.0的pre版本)
AngularJS
- 做者:google的開發者,主要是他們內部使用,而且採用MIT協議
- 內容:
- MVW(Model-View-Whatever )模式
- 基於DOM的模版聲明式綁定.
- 內置基礎的url路由和數據序列號
- 工具:他們實現了一個可讓你在調試時監視你的數據模型的chrome的調試插件,以及一個針對Jasmine 測試框架的插件
- 優勢:
- 按照他們所宣傳的,這是一個將來瀏覽器會原生支持的框架,因此咱們應該如今就用這種方式來編程。
- 對服務器端的架構和文件結構沒有影響,能夠用在不須要對整個頁面控制的小部分。
- 項目地址: GitHub,官網
- 開始時間:已發佈(曾在google使用過)
Knockout
- 做者: Knockout團隊和社區(包括我在內目前核心團隊有三個成員)
- 內容:
- Model-View-ViewModel (MVVM) in JavaScript, MIT licensed
- 關注與富UI:基於DOM的聲明式綁定,擁有自動依賴檢測的"觀察者「模型
- 不強制綁定URL路由和數據——和其餘第三方庫結合(例如使用Sammy.js作路由,採用ajax方式存儲數據)。
- 着重關注於易用性,有大量的文檔和交互的例子
- 特色:
- 專一於UI,支持IE6
- 對服務器架構和文件系統沒有影響。能夠用在不須要對整個頁面控制的小部分。
- 項目地址: GitHub,官網
- 開始時間: 發佈將近兩年
Spine
- 做者: Alex MacCaw
- 內容:
- MVC in JavaScript, MIT license
- 最初做爲O’Reilly一本書的示例代碼,最終演變爲一個開源代碼工程
- 是Backbone的一個克隆版本(就像名字那樣)(譯者注:Spine和Backbone都有脊柱的意思)
- 特色:你但願用不一樣的方式來使用Backbone兩者不一樣能夠參看這裏
- 項目地址: GitHub,官網
- 開始時間: 已經發布1.0.0版本
Batman
- 做者:Shopify團隊(一個電子商務平臺公司)
- 內容:
- 支持Javascript的MVC架構,幾乎是爲Rails+CoffeeScript開發者設計的。MIT 許可
- 定製性最強的一個框架,你必須按照它的約定(例如文件結構和URL路徑),不然,就像它」高傲「的做者們所說的:「不遵循約定就別用」。 *全棧式的框架,擁有豐富的模型,視圖和控制器及路由。固然也有觀察模式的機理。 *基於DOM的模版
- 特色: 若是你使用Rails和CoffeeScript,你會駕輕就熟……
- 項目地址: GitHub,官網
- 開始時間:目前是0.9版,預計在將來幾個月內發佈1.0版本。
CanJS
- 做者:bitovi團隊(一個js諮詢培訓公司)
- 內容:
- MVC in JavaScript, MIT licensed
- REST-persistable模型,基礎的路由,基於字符串的模版。
- 並不很出名(我在上週前還不知道它),儘管它是一個很老的javascript mvc項目的從新開放。
- 特色:致力於構建一個輕量的,提供上述全部框架都具備功能特性的最好的框架。
- 項目地址: GitHub,官網
總結
若是你在考慮究竟那個是最適合你的項目,我以爲應該考慮兩個方面:
除了不一樣的地方,我能夠確定上述這些技術都遵循的一個功能:模型和視圖分離。這是一種在20年錢就已經存在的經典設計模式。即便你在構建最簡單的web應用界面你也能從這種模式中受益。