而关于原生态的开发,个人觉得HTML5中间件或者混合原生的方式肯定是不用做比较的,毕竟原生的东西还是很强大的,很多效果是HTML5无法比拟的,但是请确认你要做的产品是要炫?还是实用?好吧,入正文啦。
记得第一次接触PhoneGap,是在2011年5、6月份左右的时候,当初寻找这类HTML5中间件或者说HTML5平台的初衷是为了能快速推出iPhone及Android等智能手机客户端;至于为什么需要这类HTML5中间件呢?我们是出自这样的考虑:
- 由于公司资源的分配问题,原生态开发组已经肩负太多的项目,等待原生态组团队明显不能满足我们急切要推出智能端的要求;而现有团队都是做WEB开发的,显然对于HTML这个团队是比较熟悉的,而且这样的学习成本也是相当的小;
- HTML5跨平台的特性,一次编译,run Anywhere.只要一套html5程序代码,经过中间件的编译就可以在iPhone、Android及Symbian,还有Windows Phone 上运行,明显这个是开发成本及时间成本上可以大大的节省;
- 用户体验性能如何,能否给用户提供流畅的用户体验;
在满足了这些条件及经过一周时间的选型之后,公司决定选择了PhoneGap平台(中间也分析过其他中间件平台如:Titanium、Sencha Touch等,但都不是很理想),接下来就是苦逼的开发鸟~
由于前期在HTML5平台的使用上欠缺经验,所以在前期做选型的时候没有用很具体的业务逻辑去做性能测试,结果到了开发的中间过程,发现PhoneGap的整体性能太差了,点击一个事件都要等半天,启动页面也很慢,切换页面也是相当的慢,最终我们的产品连页面件的切换动作都不敢用…但是已经在研发进程中了,此时再改方案似乎也没有好的平台选择,也无法保证产品进度鸟,最终我们做出了这样的技术优化:
- 页面的js库,采用自己的JS库,没有采用Jquery mobile,以加快加载速度;
- 采用本地HTML界面模版方式做数据缓存,以减少数据请求次数;
- 修改了PhoneGap源代码,优化启动界面及部分接口,如地图定位接口;
最终产品如期推出,可是性能方面上只能说是差强人意啊,至于体验,我想到了目前流行的一句话我想说“我能讲脏话吗?”“不行”“那我没什么好说啦!!!”
其实当初也大体知道PhoneGap在性能方面上表现差强人意,可是我们是这么期望的,在我们产品的开发过程中,应该会得到改善,而事实证明这个期望让我们承担了太多的风险;
之后,我们也试过了采用Sencha来实现,表现也是一般,所以对于HTML5中间件的性能表现,我们都不抱希望了,虽然说对这个方向一直都是看好的,可是一直都没有很好的中间件能解决这个性能问题;这个状态一直持续到今年的3月份的一天,在36Kr网站上得知了AppCan这个产品在做内测,所以很快就申请了内测,进行了试用;
一开始我试用的是采用Web模式,将http://www.8000.cn的网址编译成APK包做测试,发现好像整体启动速度及性能表现还可以;出于上次的经验,我再测试了AppCan所谓的Easy模式,随便搞了新闻类的编译了一下,感觉这东西好像还不错哦,效率应该可以挺高的,可是Symbian版本就实在难以接受鸟,下载后一大段时间白屏,然后还要再下载一个AppCan核心插件,最终直接关闭程序,无视Symbian版本;然后便安排了技术人员做深入的了解及实验,包括从API接口,性能及支持方面进行详细的研究;
研发团队经过了2周的时间的代码实现,出了一个公司产品的Demo版,在经过大多数相关人员的使用过后,感觉性能比PhoneGap实现的确实改进了不少,比如说页面的切换特效还挺顺畅的,一些公共插件及接口都比较全面,如Jabber通讯、二维码扫描、支付宝等;可是致命的一个问题是:点击触发某个事件的时候,还是可以感觉‘顿’一下的等待,让人有点不爽,最终这个问题也顺利得到了解决,原因是onclick事件的响应没有ontouchstart事件来得快,两者相差了0.5s这个数量级,实在无语AppCan这样的重要体验,都没有文档说明。
下面表格是PhoneGap与AppCan综合对比表:
备注 | PhoneGap | AppCan | 备注 |
整体表现性能 |
|
|
|
多窗口支持与动画 | 不支持 | 支持多窗口及native平台自身的窗口间动画 |
在整体UI上,PhoneGap自始至终只存在一个窗口,也就是所有的网页都运行在这个窗口当中的,这也就使得用PhoneGap写出来的应用失去了很多native应用的原生特性。 AppCan采用Window的理念来划分窗口。每个window独立存在,可以相互跳转,并且可以指定一个跳转时的过渡动画效果,如此一来,用户体验效果就非常接近native应用了,并且不存在影响效率的问题 |
Native UI支持 | 支持,开发者自己打补丁 | 支持并且有系统的NativeUI扩展 |
PhoneGap没有一套完整的native UI架构,所有UI完全依靠HTML和CSS完成。手机上的webkit存在IFrame不支持height属性,css样式不支持z- index,position,overflow等属性的硬伤,也就是页面的区域滚动在正常网页布局下是无法做到的,只能依赖JS或者native UI。 不幸的是PhoneGap把这个问题留给了开发者,开发者只能选择JS。在页面滚动上用JS效率是相当低的,尤其在android的中低端手机上表现更为 明显。 而AppCan则采用html + native的布局方式(开发者同样写JS即可做到),很好的解决了这个问题,在页面滚动的表现上,与native应用没有任何差别。 |
API接口 |
|
|
|
开发环境 | 无标准的IDE及模拟器,不同平台的开发要求安装不同的开发环境 | 一套完整的开发环境,IDE为标准的Eclipe插件,支持智能提醒,自动补齐,代码自动生成,模拟器为标准的Chrome扩展插件,支持单步调试,Log输出等 | |
文档说明 |
|
|
|
开源及是否收费 |
|
|
开源及是否收费问题,一直是很多开发者担心的问题,怕有一天AppCan就收费了,其实AppCan官方已经承诺会永久免费,另外一般国内优秀的产品是不会开源的,而选择开源可能就证明其在走下坡路鸟; |
技术支持 | 基本上很难得到技术支持的相应,每次邮件都是苦逼的等待 |
|
|
开源及是否收费 | 可以正常上线 | 可以正常上线 |
综合来看最终还是感谢AppCan这个产品,虽然有些地方还需要完善,但的确做得挺棒的,基本满足了我们产品研发的需求。PhoneGap作为较早进入国内的HTML5中间件知名度较高,但毛病也不少。希望两者都能越来越好!