为何从PhoneGap中逃离

 我是一名移动应用的开发者,从JAVA 为主的Android到以Objective-C为主的iOS最后到以HTML5为主的跨平台开发,我已经走过了五年多的时光,而我也从一个底层的码农成长为项目负责人。javascript

  每一位程序员都有本身的技术信仰,我也不例外。但当技术信仰遇到实际工做中的问题时,你又要怎么作呢?还记得刚刚接触HTML5作跨平台开发的时候这样的问题就摆在了我面前。css

  当初公司决定选择PhoneGap做为核心框架,不过在以后的工做中就慢慢以为PhoneGap并不像人们说的那么好,至少在个人项目中的表现不是那么完美。html

  从项目研发到总体的UI体验,随之而来的各类问题都有待解决。你能够嘲笑我,也能够说我根本不懂,不过在应用开发的过程当中任何的问题都不可忽视。java

  项目研发android

  在项目研发中主要是开发环境与应用实现,不过PhoneGap在终端平台的支持与应用打包上也出现了些问题。程序员

  1.支持终端平台web

  表面上来看,PhoneGap支持的平台数量最多。可是在实际开发过程当中,无论用什么平台开发,除去平台封装的扩展对象,彻底遵循W3C标准,也不可能彻底运行在多个平台上,因此说跨多个平台是不现实的,仍是须要针对不一样的平台进行实现。浏览器

  2.开发环境网络

  在应用开发的过程当中,开发环境相当重要,可是PhoneGap没有本身的IDE开发环境,官方推荐一些公开的第三方html编辑软件(第三方编辑器不可能将PhoneGap所作的JS扩展表现出来)。架构

  对开发者来说,用PhoneGap开发并非单纯的html + css + javascript的开发,要进行PhoneGap开发,开发者必需要下载以上7个平台厂商所提供的开发环境,IDE等(这个PhoneGap官网有描述),环境搭建完成后方可进行模拟调试,对于没有接触过手机开发的web开发者而言,还须要学习很新的东西,入门门槛过高,开发难度无疑要加大。

  3.打包部署

  作过应用开发的人都知道,基于开发环境必须针对不一样的SDK进行开发,因此打包部部署步骤比较繁琐,并且每一个平台要在不一样的环境下操做。最近推出在线打包,可是须要付费购买使用的。

  4.应用的实现

  当进行应用实现的时候,使用PhoneGap开发应用必须在网页当中引用一个JS包,才能使用本地扩展对象。过多过大(例如再引用JQ)的JS包引用将加剧引擎的负担,从而影响应用性能和用户体验,全部UI彻底依靠html和css完成。

  不只如此,手机上的webkit存在IFrame不支持height属性,css样式不支持z-index,position,overflow等属性的硬伤,也就是页面的区域滚动在正常网页布局下是没法作到的,只能依赖JS或者native UI。不幸的是PhoneGap把这个问题留给了咱们开发者,开发者只能选择JS。在页面滚动上用JS效率是至关低的,尤为在android的中低端手机上表现更为明显。

  用户体验

  用户体验是每个应用是否可以立足生存,被用户所接受并长期使用的缘由,因此致使PhoneGap在用户体验上有必定的差距,这里我主要是对PhoneGap引擎问题的分析:

  1. 平台稳定性差

  从PhoneGap公布的源代码和一些用PhoneGap开发出来的应用体验上来看,PhoneGap是没有通过完整而系统的测试的,或者尚未进行过机型的适配,还存在不少的BUG,许多应用有手机平台版本的限制等等。

  而且由于开源,不断有开发者往上提交代码,各平台的兼容和同一平台不一样版本之间的兼容问题在PhoneGap开发上会愈来愈大。UI上最明显的问题就是页面被放大。Android平台的webkit会根据手机设备屏幕的分辨率,密度,大小等条件来对网页进行0.75~ 1.5倍的缩放,以适应屏幕。这意味着在不更改webkit缩放比例的状况下,若网页当中写了相似width:10px; 时,实际上可能变成了10 * 1.5。同时,在带有输入框的页面当中,一旦选中输入框,页面当即会出现再被放大的效果,而且放大后没法缩回,致使用户看到的UI效果跟开发者想要的想要的效果相差较大。

  2. 对国内厂商终端的适配差

  PhoneGap现有功能上有多处存在不完善。好比定位功能,在关闭GPS,GPRS,WIFI、系统基于网络定位设置的状况下(此时链接了WIFI),是没法获取到地理位置的,国内手机厂商的手机常常崩溃或运行错误,因此用户体验差。

  3. 不支持多窗口与动画卡顿

  在总体UI上,PhoneGap开发过程当中自始至终只存在一个窗口,也就是全部的网页都运行在这个窗口当中的,好比窗口的切换,过分等的动画效果,使用JS和CSS3能够实现一些动画效果,效率是很低的,而且只局限于当前网页内,至少在现阶段部分设备硬件配备还没跟上以前是这样的,并且除IOS之外的终端设备,厂商繁多,良莠不齐,更难确保作出来的应用可以良好的运行在各个平台,因此用户体验很差。

  4. UI延迟效果差,易崩溃

  从PhoneGap开源出来的代码架构来看,PhoneGap自己的机制会致使UI上有必定的延迟,在不改现有架构的基础上这个问题是不可避免的。好比传感器的速度明显过慢,照相机打开拍照后回调时间过长等,这些都是在很是简单的网页下的表现效果。因为PhoneGap自己基于开源策略架构(利于开发者往上扩充功能)和在JS层面作了大量工做的缘由,PhoneGap开发不管在iPhone仍是在Android上都并无走自己平台所特有的JS扩展方式,而是采起了线程休眠,暂停浏览器timer等方式来获取回调,直接致使延迟。另外,如照相机接口,PhoneGap返回给用户的并非相似于文件存储地址的字符串,而是将相片转为了二进制发给用户,致使这个操做很是耗资源,而且时间消耗很长,在图片大的状况下,还有可能由于OutOfMemorySize异常而引发应用直接崩溃。

  也许这些问题在你的团队中称不上什么问题,可是在一个资源不是那么丰富的团队中这些问题就显得尤其突出。并且,在应用开发的过程当中各类细节问题都不可忽略,追求完美的应用要从细节作起。虽然PhoneGap能够实现不少跨平台应用的开发,但开发者尤为是项目统筹人员在选择框架的时候必定要三思然后行。

相关文章
相关标签/搜索