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,也是为了提高轻应用的性能表现。
特性
官方网站上介绍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等其他模板引擎上。
SockJS:SockJS是一个可以提供类似websocket对象的js库,能提供服务器和浏览器之间的一致连贯的、跨浏览器的连接。websocket是可选的,SockJS可以用自己的协议来代替,也就意味着可以支持较低版本的浏览器。
Clouda UI:Clouda UI是一个支持双向数据绑定的轻量级UI框架,里面封装的是GMU组件,GMU是百度FEX Team为轻应用开发的一套移动优先的UI组件,不过现在已经开源出来,可以在Clouda里用,也可以单独使用。
Clouda的依赖里面还包含其他node模块,如Clean-CSS、shelljs、uglify-js,因为不是很重要这里就不提了。
核心架构
Clouda项目默认使用MVC架构,我根据官网的介绍和实际项目的代码画了一张示意图如下:
clouda架构
从图中可以看到Controller并没有和Model直接交互,而是通过一个Pub/Sub模型。由于Clouda使用SockJS和Handlebar实现了Model到View间的数据绑定,实际上这个架构是有点接近于MVVM了。
Clouda项目负责人童遥在一次演讲上演示的架构如下:
clouda架构2
童遥的演讲讲了为什么要开发实时性的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组件版,去掉不必要的东西,能方便的嵌入到其他应用程序里面。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
我在Ubuntu的Docker中写的Node.js程序能否在CentOS的Docker里面运行?
-
node.js和云平台的关系?
-
如何雇一个牛逼的 Node.js 开发者
初创公司一开始的挑战就是给技术团队增加高效的人才资源。在快速得出关于把 Javascript 开发变成 Node.js人才之前,让我们先来看看关于Node及产品开发环境的核心问题。
-
基于Node.js的API框架:LoopBack 2.0发布
LoopBack是一个基于Node.js、开源的API框架,可以使基于Node.js的应用与各种移动设备通过API进行互联。