HTML5、Web引擎与跨平台移动App开发

html5、web引擎与跨平台移动app开发
移动端跨平台应用开发是个有趣的话题。纵观该领域目前各个开发商提供的多种方案,大致可以分为三大类:
基于html5的方案。该方案以phonegap/cordova为代表。其基本思路是针对html5标准目前功能上的不足,补充定义了一套比较实用的api(比如硬件访问/系统交互等),然后基于平台上自带的web引擎(比如ios的uiwebview等),通过扩展机制实现了这些api,在此基础上再提供一套应用打包部署系统。intel的xdk也属于此类方案。将native api映射封装成统一语言的api的方案。该方案以titanium、xamarin为代表,其中titanium提供javascript api,xamarin提供c# api。这样的好处是可以较容易达到和native api类似的能力,编程模型/方式也和原生应用相似。
有行业针对性的html5 api方案。比如ludei的cocoonjs就是一个比较有意思的方案,它设计了一套专门针对2d/3d游戏开发的api(支持ios和android)。可以认为它是html5图形操作的子集(canvas +webgl),再加上一些扩展的api比如硬件访问能力/广告/应用内购买/社交网络整合等,以实现一个完整的游戏引擎。本文重点介绍基于html5的方案相比其他方案的优缺点,如何实现更好的效果,以及目前的一些进展。
html5方案的特点原生api映射的方案,如titanium、xamarin,其优点在于功能和性能与原生系统比较接近。但是,由于不同系统原生api设计上还是会有不少差异,api的映射还是需要不少的权衡取舍。同时,由于这些api是这些厂商自定义的,谈不上什么标准,相应的开发资源(程序库/技术支持/社区等等)也相对有限。
而另一方面,标准化、开发资源的丰富则是html5方案最大的优点,同时第三方的html5框架工具比如phonegap/cordova也极大促进了html5应用的发展,它们提供了方便的跨平台应用打包/发布服务、实用的api、灵活的扩展机制、以及积累下来的丰富的第三方api实现。而上游的w3c一旦开始支持一些新的api,phonegap/cordova也可以很快沿用这些标准的api将相关能力开放出去。
html5方案的主要不足则在于功能和性能方面,这主要是因为html5应用的能力严重依赖于系统自带的web引擎:ios的uiwebview、android的webview等,此类组件的html5能力相比safari for ios、chrome for android都要差一截。另外在android平台上,由于系统碎片化比较严重,不同android版本的webview的html5能力也有较大差异,导致相应的html5应用一致性难以保证。
好消息是,现在已经出现一些第三方的web引擎以提供比系统默认的webview更好的功能和性能,而phonegap/cordova也正在改进架构以便引入这些更好的第三方web引擎。另外对于tizen、firefox os这样本身就是html5 runtime加上扩展api的系统而言,html5应用是一等公民,在功能拓展方面相比ios、android上会增强不少。
而第三种方案,cocoonjs的优点是专注于2d/3d游戏开发,画图性能很好,比如同时画1000个精灵也能达到60fps,这是绝大多数的浏览器/通用的html5引擎目前还做不到的。这个方案的缺点在于,由于它的画图操作简化了很多路经,它无法做到和html5 dom元素的互操作,而且它的html5能力也只是一个子集,功能比较受限。目前cocoonjs针对android也引入了另外一种模式webview+作为补充,webview+基于chromium的内核加上cordova api的支持以实现更通用的html5能力。
总的来说,html5应用的能力很大程度上依赖于web引擎的能力。因此,无论是移动操作系统开发商还是开发工具的开发商,都持续在web引擎的方向投入了更多的努力。
web引擎web引擎目前大致可分为三种方式:
浏览器,比如safari/chrome/uc browser等;系统自带的webview组件,比如上面提到的ios uiwebview和android webview专门的web engine,比如intel的开源项目crosswalk、ludei的webview+浏览器方式很容易理解,一个html5应用就是一个web页面,用户通过浏览器打开一个url,然后进入浏览器的全屏模式/app模式进行操作,或者是通过点击一个事先创建好的快捷方式打开应用。这种方式的性能取决于浏览器本身对html5的支持情况,一般来说要优于webview组件的方式,但是问题在于不同的浏览器有差异,而且通过浏览器运行html5较难做到类似原生应用的体验(应用切换/权限管理/系统资源访问/整合等)以及丰富的api支持。
webview组件方式的一般用法是以hybrid的方式发布html5应用,即上述提到的phonegap/cordova方案所采用的方式。其问题已经在上面提到过,主要是webview组件本身对html5的支持能力不足。
专门的web引擎可以有较好的html5功能和性能支持,同时有较好一致性,类似原生应用的系统整合也可以做得较好。这种方式的缺点则在于开发者需要将web引擎与应用程序一起打包,生成的应用大小会更大,因此有的web引擎(如crosswalk)也提供了一种“共享模式”,让多个应用可以共享一个web引擎,仅当应用第一次启动并且发现系统还没有相应web引擎时才提示用户下载安装。
目前的发展趋势是:通过phonegap/cordova方式得到丰富的api支持,通过专门开发的web引擎去提升html5的能力。
crosswalk和ludei的webview+在概念上比较类似。webview+是闭源的,目前还不好评估;crosswalk由我所在的团队开发,是开源的(bsd许可协议),基于chromium内核,着重于对html5功能和性能的支持,发布周期为六周一次,支持cordova api。
目前crosswalk正式支持的移动操作系统包括android和tizen,在android 4.0及以上的系统中使用crosswalk的web应用程序体验和原生应用没有区别。该引擎现在已经成为众多知名html5平台和应用的推荐引擎,包括google mobile chrome app、intel xdk、famo.us和construct2等等,未来的cordova 4.0也计划集成该web引擎。不过比较遗憾的是,由于ios的限制(ios不允许应用使用使用除ios uiwebview之外第三方的jit–即时编译引擎),目前crosswalk也没有办法提供直接的支持,但这也许会随着html5更广泛的进入移动市场而发生改变。
总结现在的html5 app(加上api扩展)已经可以胜任很多事了,比如教育类应用,休闲游戏等等。不过对于那些实时性要求比较高的、计算量大的(比如涉及大量的元素绘制,或并行计算等)、复杂的3d游戏,多人在线游戏/应用等还有不少差距。另外,工具方面,如何能够更高效的调试/开发/性能内存调优 html5应用也是另外一个需要提高的地方。不过,这些方面也在不断的演进。相信不久的将来,html5终会成为主流移动开发平台。
上一个:深圳网站建设制作水准的必要性
下一个:网站制作五大基本特点分析
大埔网站建设,大埔做网站,大埔网站设计