最近一直比较关注百度Clouda,参加了数次百度Clouda团队举办的技术沙龙,也利用了一些时间读了开发文档,下面谈谈我对这个框架的初步理解:
1. 轻应用和Clouda的区别和联系:
“轻应用”这个词是百度提出的,可是轻应用的概念并不新,是在原来HTML5 WebApp加入了即搜即用的特点,其余的特色与HTML5 WebApp是彻底同样的。
轻应用 = HTML5 Web App + 即搜即用
百度世界大会上所讲的:“移动搜索+轻应用”是知足海量中长尾需求的最佳模式,能够有效解决应用开发和用户需求的对接。 其实就是讲即搜即用的特色。
通常意义上的HTML5应用的特色:
○ 不须要下载,直接可使用
○ 不须要安装,即不占用手机存储空间
○ 多平台兼容
javascript
目前百度轻应用有三个途径开发,AppBuilder、SiteApp、Clouda。前端
AppBuilder是一个App模板,用户只须要灌入内容,生成的应用基本没有吸引力,意义不大,是为App开发小白准备的。java
SiteApp是为了让传统的PC网站转化为应用,本质上也是一种自动化生成工具,能够快速的把大型网站转为移动应用,虽然相比AppBuilder要灵活方便,可是需求固定,只适用于少数场景。mysql
Clouda才是百度为开发者提供的轻应用开发框架,灵活有意义。android
但通过一段时间对百度轻应用的跟踪,我发如今百度手机客户端中已经开始推广的轻应用中还包含了第4类,也就是传统的HTML5应用,这些应用并非使用Clouda框架开发,而是使用传统Web App方式开发,例如:今日头条。对于HTML5应用其实UC等厂家已经作了一些尝试,在手机UC客户端能够看到首页中能够添加网页应用,应用的数量已经不少,包括糗百、奇艺、猫扑、扫一扫等等。实际上这些应用也彻底能够进入百度轻应用的列表中,可是这种方式的轻应用与Clouda轻应用的差异就在于缺失了Clouda几个重要的特点:随动反馈和部分SEO能力。
通常的公司开发一款应用须要两类开发者,服务器开发和客户端开发,这二者的技术差别很大,即便是服务器使用Java,客户端用Android,除了基本语言是Java外没有其余的联系,并且服务器和客户端交互的时候,仍然须要将Java对象序列化为json数据,客户端接收到在进行反序列化。服务器使用什么语言对于客户端来讲都同样,都须要再写解析程序。对于咱们来讲,以前咱们采用服务器端经过反射机制自动生成接口代码的方式节省客户端的工做,也节省了修改接口文档的工做。可是Clouda开发方式更加完全,彻底不须要纠结于此,完全的打通了服务器和客户端,不须要再书写接口文档,不须要生成接口代码,服务器和客户端代码自己就在一块儿编写,这也就是百度所说的云端统一,实际就是服务器和客户端统一,好像如今你们都喜欢把服务器称为“云”,可能听起来更拉风吧。
■ 百度对Clouda的开放态度
从Clouda的github项目sumeru所采用的协议MIT来讲,在这个协议控制下的开源程序基本没有法律风险,使用者能够修改、再发布、商业化等等都不须要知会百度,这个角度来讲对我的仍是公司都没有风险。但有的公司发布的开源项目在开源一段时间后同步发布商业版本,公司再也不对开源版本进行更新,彻底交给社区,仅更新商业版本,这回致使开源项目受到极大的影响,目前来看,百度有着更大的抱负,没有理由为从Clouda项目拿少许收入而使自身名誉受损,并且若是Clouda模式成功,这种作法也会推进社区开源版本的去百度化,严重影响百度的战略布局。因此综合两种状况来看使用Clouda都是安全的。
■ 初步使用感觉
Clouda框架实现了MVC架构,应用代码结构清晰条理,做为最重要的枢纽,Controller,三个主要时态分工明确,onload()函数中用来执行数据的订阅,是MVC中Controller和Model创建联系的过程;这个函数中的代码若是开启了Server渲染,则极可能会在Server端执行,这也就是为何Clouda框架开发的应用冷启动速度优于通常的HTML5应用,由于在onload()函数中,服务器执行了部分js代码,使得客户端节省了这部分代码在服务器上执行的时间。
onrender()函数负责对View的渲染和转场,是MVC中Controller和View创建联系的过程;
onready()函数负责在View渲染完成后,完成事件的绑定、DOM操做等业务逻辑,其中的代码都是运行在客户端的,因此可使用前端js中的变量和函数,好比window, document等。在百度技术交流会上童遥大牛也解释过,他们正在作服务器端执行剩下部分js代码的工做,个人理解是dorender()代码中的js部分,因此若是真的实现的话,应用的冷启动速度会进一步提高。固然这个技术是在用空间换时间,服务器执行了js代码,渲染了HTML,结果会一块儿发送给客户端,相比原来的页面,HTML内容应该更多。
ios
下面是todolist例子中的代码片断:git
App.todos = sumeru.controller.create(function(env, session){ // 第一时态:Controller须要使用的数据都在这个时态加载,订阅发布数据 env.onload = funtion(){ return [getMsgs]; // 这里返回一个fuction }; // 第一时态讲解:若是您开启了Server端渲染,那么在onload函数中需确保onload中,没有使用前端的js中的变量或函数,好比window,document,Localstorage等 // 第二时态:负责对View的渲染和转场 env.onrender = function(doRender){ doRender('todos', ['push', 'left']); // 第一个参数定义了Controller和view视图的绑定 }; // 第三时态:在View渲染完成后,事件绑定、DOM操做等业务逻辑在此时态中完成 // 每段逻辑使用session.event包装,从而创建事件和视图Block的对应关系 evn.onready = function(){ };
■ 为何相比于普通的HTML5 Web App,Clouda框架开发的应用能够实现即搜即用?github
从上面的说明能够看出因为数据绑定在onload函数中运行,而Server渲染是默认开启的,也就是这段代码是能够在Server端运行的,因此搜索引擎的网络爬虫是能够再次运行这段代码,获取到应用内的数据,而传统的数据只有在客户端才能够访问,若是搜索引擎要抓出应用内的数据,那就意味着他必须重建环境,在服务器端运行客户端程序,如今看来只有在搜索服务器上搭建移动端虚拟机,例如android虚拟机、iphone虚拟机,好像目前还没听到有公司使用这样的方式抓取内容。
web
■ Clouda框架中没有UI部分ajax
Clouda框架更偏向于数据层,没有UI部分,用户可使用网络上通用的UI框架,好比jQuery mobile, Kendo UI, Sencha touch等。
我认为将来愈来愈多的创业团队会选择Clouda进行快速研发,短时间内就能够获得产品验证和反馈,大公司因为有历史缘由,原有的服务都是使用java或PHP编写,数据库是mysql或者mongodb,和Clouda对接有必定的难度,即便数据库采用的是mongodb,原有的客户端改写了mongodb数据,若是不进行进一步开发,Clouda是没法感知数据库中数据的变化,失去了实时性这个特点。另外一方面,大公司在原有的平台上已经考虑了HTML5 Web应用,从UC的网页应用数量能够看出,通常的HTML5 Web应用开发方式和传统的Android,ios,Winphone开发方式相似,web独立代码,做为第四个平台,服务器端复用,使用ajax方式请求接口,能够知足目前移动网页端的布局。 传统历来都会短时间消失,习惯也不会一天改变,对于新兴的优秀技术,只要先进,能加快研发进度,实现效果,最终必定会成为一股潮流,至因而否能成功还有不少因素,但愿百度可以坚持下去,有大公司支持的开源项目生命力会更顽强,有百度的大力宣传,才会有更多的开发者知道Clouda。 以后但愿从更加技术的角度讨论Clouda平台开发。