Clouda框架介紹與應用場景
原創Clouda是一個NodeJS Web開發框架,但是,與流行的Express框架不同,Clouda是一個完整的前后端開發解決方案,等價于目前熱議的MEAN架構。
MEAN是指mongoDB+Express+AngularJS+NodeJS,在Clouda中則是mongoDB+Clouda core+Handlebar+NodeJS,Clouda是一個集成框架,相對來說比MEAN要容易上手,另外Clouda中實現了前后端數據綁定和 UI實時刷新,也就是實時性。
與Clouda類似的NodeJS實時Web框架有Meteor、socketstream、Derby,另外網易有基于NodeJS的游戲服務端框架pomelo,也支持開發實時性Web App。
歷史
Clouda框架是百度歷經兩年開發出來,并在Github上開源,2013年8月百度世界大會上正式發布。截止至2014年5月已至0.10.2版本。
Clouda的前身是sumeru(西米露) WebApp平臺,據傳該平臺由前百度云***架構師林仕鼎設計,由百度移動云部門下面的技術團隊開發,并由童遙擔任項目負責人。
Clouda是配合百度移動云戰略而研發出來的,是百度輕應用戰略的一部分,其目標是打造媲美原生應用性能的Mobile Web App,也是為了提高輕應用的性能表現。
官網:http://cloudajs.org/
Github:https://github.com/brandnewera/sumeru
特性
官方網站上介紹Clouda的特性如下:
云端統一。只用Javascript一門語言,抹平云端界限,一份代碼處處運行。這是屬于nodejs的特性。
實時編程。所有數據實時推送的基礎設置,每個終端都無延遲同步響應。
隨動反饋。面向數據的編程模型,數據實時推送后,界面會自動更新。這兩條說的其實就是一個事,就是實時性。
專為移動。為智能手機與平板電腦特別設計,運行性能高,標配離線能力。
高兼容性。標配數據同步工具,兼容已有服務;同時兼容Backbone等開源框架。也就是說一些組件可以被替代,如handlebar.js和Clouda UI。
一鍵托管。無縫整合百度BAE云環境,即可自建服務器也可一鍵托管在百度云。
SEO能力。原廠匹配主流搜索引擎,每個APP場景都可以被搜索引擎爬蟲抓取。這兩條是為配合百度的服務準備的,其實還可以加一條,就是快速接入輕應用。
入門簡單。簡單語法搭配豐富教程與文檔,保證快速上手,還配有5分鐘教程。Clouda框架還是需要一些學習成本的,雖然比其他的框架可能要簡單一點。
組件介紹
mongoDB:mongoDB是Clouda正常運行所依賴的環境,mongoDB是非關系文檔型數據庫,數 據以json的二進制擴展bson存儲,讀取出來的數據可以直接在javascript中操作而無需進行轉換。Clouda使用mongoDB官方開發的 驅動組件mongodb來操作數據庫。
另外Clouda還支持Redis的分布式存儲,不過也需要先有Redis環境。
Handlebar.js:一個弱邏輯的js模板引擎庫。它的特點是你可以像在ddcms、wordpress中寫模板一樣來寫頁面。它可以將數據綁定到html節點,并在數據改變時實時刷新UI。
這個庫是可替換的,你可以切換到backbone等其他模板引擎上。
Handlebar.js官網:http://handlebarsjs.com/
SockJS:SockJS是一個可以提供類似websocket對象的js庫,能提供服務器和瀏覽器之間的一致連貫的、跨瀏覽器的連接。websocket是可選的,SockJS可以用自己的協議來代替,也就意味著可以支持較低版本的瀏覽器。
SockJS Github:https://github.com/sockjs/sockjs-client
Clouda UI:Clouda UI是一個支持雙向數據綁定的輕量級UI框架,里面封裝的是GMU組件,GMU是百度FEX Team為輕應用開發的一套移動優先的UI組件,不過現在已經開源出來,可以在Clouda里用,也可以單獨使用。
GMU官網:http://gmu.baidu.com/
GMU Github:https://github.com/fex-team/GMU
Clouda的依賴里面還包含其他node模塊,如Clean-CSS、shelljs、uglify-js,因為不是很重要這里就不提了。
核心架構
Clouda項目默認使用MVC架構,我根據官網的介紹和實際項目的代碼畫了一張示意圖如下:
從圖中可以看到Controller并沒有和Model直接交互,而是通過一個Pub/Sub模型。由于Clouda使用SockJS和Handlebar實現了Model到View間的數據綁定,實際上這個架構是有點接近于MVVM了。
Clouda項目負責人童遙在一次演講上演示的架構如下:
童遙的演講講了為什么要開發實時性的Web App框架以及設計思路,不少干貨還是值得一看的:云端一體的WebApp實時基礎設施設計思路
應用場景
由于Clouda使用了類websocket機制,每一個瀏覽頁面的用戶都要創建一個長連接對服務器進行輪詢,因此***每一個瀏覽頁面的用戶都是重 度用戶,而不是看一下頁面就離開。Clouda的設計本來是為Mobile Web App,因此可以適用,但實際上也是可以用于PC瀏覽器上的,即Web App。
同時,每次Clouda啟動都會動態的創建頁面資源,因此頁面越少越好。
綜上,Clouda適用于頁面少的Web App,即在線工具和服務等,而不適用于用戶平均在線時長和PV/IP比偏低的服務,如Blog、CMS等偏靜態頁面的開發。
官方提供了以下功能示例代碼,你可以認為它們是Clouda適用的應用場景。
- TO-DO list
- 多人聊天室
- 多頻道的聊天室
- 帶數據驗證的用戶系統
- 獲取第三方數據
在Clouda官網的客戶案例頁面提供了更多的示例,這些是業務層面的,全部都是Mobile Web App,總結如下:
- 客服頁面
- 招聘網站
- 旅游攻略
- 導購
- 菜譜
- 違章查詢
可以看到業務案例大多是IO密集的數據庫查詢。這也是NodeJS的強項。
與其他框架、語言配合
Clouda會生成獨立的項目,因此無法與其他NodeJS框架如express***協同,不過Clouda支持express的數據接口。
另外Clouda會動態生成頁面文件,因此也無法與其他語言如php等進行混合開發,不過也可以用API和組件的方式協同。
期待
Clouda的理念很先進,但也有不完善之處,以下是希望Clouda進行改進和完善的地方。
更抽象,能夠選用模塊,而不是默認封裝。在MEAN架構中,除了NodeJS,其他模塊應該是可替換的,我們希望Clouda也能做到模塊可替換,目前只是前端類庫可替換,這還不夠。
更廣泛的適用性。即能支持非實時應用的開發,網絡上的內容其實大多數不要求完全的實時性,我們希望Clouda即能支持實時,也能支持非實時。
組件化。Clouda由于使用長連接能夠用于顯示用戶的在線狀態,因此非常適用于會員系統、IM組件的開發,希望Clouda能開發一個mini組件版,去掉不必要的東西,能方便的嵌入到其他應用程序里面。
---------------------
更新:據內部消息,Clouda正在醞釀一次大的改版,將功能細化,使框架底層對開發者更透明。預計6月份會出一個預覽版。