我为什么要从PhoneGap中逃离? 转
我为什么要从PhoneGap中逃离?
摘要:每一位程序员都有自己的技术信仰,我也不例外。但当技术信仰遇到实际工作中的问题时,你又要怎么做呢?还记得刚刚接触HTML5做跨平台开发的时候这样的问题就摆在了我面前。
我是一名移动应用的开发者,从JAVA 为主的Android到以Objective-C为主的iOS最后到以HTML5为主的跨平台开发,我已经走过了五年多的时光,而我也从一个底层的码农成长为项目负责人。
每一位程序员都有自己的技术信仰,我也不例外。但当技术信仰遇到实际工作中的问题时,你又要怎么做呢?还记得刚刚接触HTML5做跨平台开发的时候这样的问题就摆在了我面前。当初公司决定选择PhoneGap作为核心框架,不过在之后的工作中就慢慢觉得PhoneGap在项目中的表现并不那么完美。 项目研发 1.支持终端平台
表面上来看,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引擎问题的分析: 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可以实现很多跨平台应用的开发,但开发者尤其是项目统筹人员在选择框架的时候一定要三思而后行。
我为什么要从PhoneGap中逃离? 转的更多相关文章
- 为什么从PhoneGap中逃离
我是一名移动应用的开发者,从JAVA 为主的Android到以Objective-C为主的iOS最后到以HTML5为主的跨平台开发,我已经走过了五年多的时光,而我也从一个底层的码农成长为项目负责人. ...
- Phonegap中自定义插件的使用
在phonegap中需要实现特定相关的功能,可能需要自定义扩展一下功能,那么扩展phonegap组件就成为了可能. 源代码结构图: 本文目的在于讲述怎么扩展一个phonegap组件以及实现. 针对ph ...
- 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载一(PhoneGap中的API)
之前本博连载过<构建跨平台APP:jQuery Mobile移动应用实战>一书.深受移动开发入门人员的喜爱. 从如今開始,连载它的孪生姐妹书phoneGap移动应用实战一书,希望以前是小白 ...
- phoneGap 中修改生成APP的名字
最近忙着研究移动开发的事情,去学习了一下移动开发的东西,例如eclipse和phoneGap进行配合使用,感觉还是不错的,先针对eclipse和phoneGa的平台搭建这里先不在详细说啦,主要还是我们 ...
- Phonegap中插件管理
一.cordova-plugin-console控制台插件的使用 1.进入工程路径后,输入如下命令: cordova plugin add cordova-plugin-console 2. 查看插件 ...
- PhoneGap中navigator.notification.confirm的用法详解
navigator.notification.confirm('您确定要退出程序吗?', showConfirm, '退出程序', '确定,取消'); function showConfirm(but ...
- phonegap中使用自带浏览器打开链接
<center><a id="ssl2" href="#" onclick="window.open('http://127.0.0 ...
- Phonegap项目中禁用WebViewBounce
UIWebView是iOS SDK中一个最常用的控件,在PhoneGap中,默认也是使用UIWebView作为默认视图显示我们的HTML应用的. 在使用PhoneGap的项目中,默认WebView ...
- PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码
PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) ...
- phonegap与H5中的接口对比
接口 HTML5 phonegap 差异 地理定位 geolocation 单次定位: navigator.geolocation.getCurrentPosition(Success, [error ...
随机推荐
- 【QCustomPlot】绘制 x-y 曲线图
说明 使用 QCustomPlot 绘图库辅助开发时整理的学习笔记.同系列文章目录可见 <绘图库 QCustomPlot 学习笔记>目录.本篇介绍如何使用 QCustomPlot 绘制 x ...
- 洛谷 P5540 [BalkanOI2011] timeismoney | 最小乘积生成树
题意 给一个无向图,边有两个权 \(a\) 和 \(b\),定义一个生成树的权值是 \(\left(\sum\limits_{e\in T}a_e\right)\left(\sum\limits_{e ...
- 【tvm解析】 Operator Strategy 机制
本文地址:https://www.cnblogs.com/wanger-sjtu/p/15082871.html Relay Operator Strategy是建立Relay IR与TOPI算子库的 ...
- JavaScript高级学习
JavaScript 进阶 学习作用域.变量提升.闭包等语言特征,加深对 JavaScript 的理解,掌握变量赋值.函数声明的简洁语法,降低代码的冗余度. 理解作用域对程序执行的影响 能够分析程序执 ...
- Github-Readme-Stats 简明教程
1. 更新 Readme 文件 在你想要放置 Readme-WakaTime 的位置中放置以下注释,这将作为程序的入口 <!--START_SECTION:waka--> <!--E ...
- Dubbo的高级特性:服务治理篇
王有志,一个分享硬核Java技术的互金摸鱼侠 加入Java人的提桶跑路群:共同富裕的Java人 上一篇中,我们已经在Spring Boot应用中集成了Dubbo,并注册了一个服务提供方和一个服务使用方 ...
- 【转载】Linux虚拟化KVM-Qemu分析(六)之中断虚拟化
原文信息 作者:LoyenWang 出处:https://www.cnblogs.com/LoyenWang/ 公众号:LoyenWang 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者 ...
- 1.简述Hibernate的工作原理。
(1).首先,Configuration读取Hibernate的配置文件和映射文件中的信息,即加载配置文件和映射文件,并通过Hibernate配置文件生成一个多线程的SessionFactory对象: ...
- Linux 概念:存储
块存储 (略) 文件存储 基于文件系统的本地文件存储: 基于网络的共享文件存储:NFS.Samba.Windows文件共享: 基于网络的分布式文件存储:HDFS... 对象存储 一种Key(对象ID) ...
- ChatGPT 1.0.0安卓分析,仅限国内分享
ChatGPT 1.0.0安卓分析,仅限国内分享 博客园首发,本文将对ChatGpt Android版本1.0.0 APK进行静态解包分析和抓包分析,从ChatGpt Android APK功能的设计 ...