在本地和phonegap,简单的应用程序要求之间挣扎
我要做一个本机(意思是, 不在浏览器中)的移动应用程序。 由于我是一个web开发人员,我正在努力决定是否应该尝试Phonegap或者只是在java或objective-c中构build本地应用程序。
应用程序的要求很简单。 GPS / WIFI的位置,Facebook的整合,我想我需要一个数据库来处理一些应用程序特定的Facebook的朋友关系。 比如像游戏中的高分 – 比如说。
我是一个networking开发人员,但不知道Java或Objective-C。 我从来没有用过Phonegap,所以我不知道它是否能够满足我的要求。
所以我的问题如下: 我可以为我的应用程序使用Phonegap,还是需要潜入新的语言?
有关:
这篇文章的更大的版本也可以在这里find,要透明,这是我的个人博客。
混合与原生应用程序
混合应用:
优点:
- 更快的开发,特别是如果你是一个长期的Web开发人员。
- 1语言可以在每个可用的平台上使用。 当然,这需要一个Phonegap包装器。 您不需要学习Objective C,Java或C#来进行任何开发。 您只需要了解Phonegap实现的基本知识。 您将需要使用上述语言,但您不需要了解它们。
- Phonegap可以提供一些原生的function,如iOS本地标签栏或Android本机标签栏等等。
- 较低的预算成本和庞大的支持者和开发者社区。
- 混合应用程序提供了访问最常用设备API的两种方法的优点,以及广泛的设备覆盖范围,同时不需要专门的技能,更大的预算和更长的上市时间,这是完全本地应用程序的更典型。
缺点:
- 过了一段时间,你会经过一段时间的血液,字面上和隐喻。
- 移动电话(即使是今天的平板电脑)速度不够快,无法顺利运行混合应用程序,移动JavaScriptfunction最多也只能睡一觉。 Android平台是一场噩梦,页面转换不能顺利进行,更不用说缺乏CSS / CSS3的实现了。 如果你认为原生的Android 2.X和4.X有差异看看Android 2.X糟糕的JavaScript / CSS实现。 iOS的performance更好,但是仍然有一个CSS3实现的缺乏,你有更好的页面转换。 为了使这个简短的本地应用程序将永远有更好的用户体验和一般的感觉。
- 你将花费更多的时间修复应用程序,然后构build它。 为每个平台创build一个应用程序是一个痛苦的脖子。 不同平台上的浏览器并不统一支持所有最新的HTMLfunction和API,这可以使开发和testing成为一个挑战。
- 如果你没有一个好的devise师,甚至不要试图build立一个应用程序; 看起来就是一切。
- 如果你不知道你在做什么,那么你的应用很可能无法获得苹果app store的许可。 即使Google Play商店也会禁止您的应用,前提是他们发现了第三方的Phonegap PayPal插件。
原生应用:
优点:
- 原生移动应用可以产生最佳的用户体验 – 快速stream畅,可以让您最好地访问设备function,并且可以在app store中发现。
- 毫无疑问,本机应用程序可以完全访问底层的移动平台。 原生应用程序通常非常快速和精致,使其非常适合高性能应用程序或游戏。 这已经够了。
缺点:
- 更大的预算,至less需要一个具有Java和Objective C知识的人员,如果您需要Windows移动应用程序,甚至需要C#。 是的,你可以自己学习,但不要生活在短时间内的幻想中。 如果您从未做过任何开发,请selectObjective C(iOS仍然是一个更好的平台)。 在其他情况下selectJava。 Java的语法类似于其他可用的语言,因此从C#跳转到Java是相当容易的,反之亦然。 目标C是它自己的世界。 它有一个相当不常见的语法。
- 发展它们可能需要更长的时间,而时间就是金钱。 这取决于应用程序的复杂性。
就你而言,如果你有一个良好的网站开发/devise技能和/或有一个好的devise师,你应该select一个混合应用程序。 只有当这个应用程序将是一个复杂的只有本地。 你想要的一切都可以用混合应用来完成。 你会发现一个伟大的支持社区。
混合应用
我以前没有提到的你在这里需要特别小心。 即使你是经验丰富的开发人员,你也会发现很多你无法解决的问题。 混合发展不应该被误认为基本的networking发展。
每个移动平台都有自己的一套问题,更不用说手机的行为依赖于设备。 如果可能的话,总是创build一个适用于较慢设备的应用程序,因为本地应用程序几乎可以在任何设备上工作
还有最后一件事,创build混合应用程序时,应用程序开发将占用您大约30%-50%的时间,其余的时间用于特定的平台debugging和学习。 相信我,即使经过几年的移动开发,有时候我也面临着我无法单独解决或者解决不了的问题。
所以在select移动框架时要小心,选2-3,花几天的时间阅读一下。
链接
这里有几个链接可以帮助你决定:
PhoneGap + jQuery Mobile 1.4教程 – 这是针对PhoneGap和jQuery Mobile最新版本的分步教程
PhoneGap + jQuery Mobile 1.4教程 – MacOS版本 – 这是一个在MacOS上的PhoneGap部署一步一步教程。 jQuery Mobile的一部分在前面的文章中已经介绍过,没有重复的地方。
jQuery Mobile vs Sencha Touch – jQuery Mobile Sencha Touch比较
jQuery Mobile vs Kendo UI – jQuery Mobile Kendo UI比较
7个最着名的HTML5移动框架 – 名称告诉一切
7个不太知名的HTML5移动框架 – 名称告诉一切
如果您的应用程序没有animation效果,而且我更喜欢在较短的时间内在networking(Phonegap)cz中创build,我们可以在多种types的移动操作系统中启动。 如果你的应用程序包含更多的UI效果和animation,那么最好是与本地..
即使您在webview(Phonegap)中开发,也需要学习Android和iOS中的一些基本步骤
Phonegap如何在设备中执行
Ios在ios webview中的animation和视图加载是困难和好的,animation效果可以清晰地观察
Android的
在运行html代码的时候,我们必须考虑Android的设备版本和设备公司,android中的一些高configuration设备给出了更清晰和高效的animation显示,但是一些设备(大多是旧版本和一些公司设备)不能给出好的animation效果,渲染效果因设备而异,
用我的愚蠢的意见,你可以开发简单的应用程序,没有更多。 文档是不够的,像其他人说,你将花费更多的时间修复错误和寻找插件比build立你的应用程序。 我会努力学习Android或iOS或其他任何东西,把它看作是你的时间投资 。 (是的,我的评论是有点偏见)。
最后,我看着它PhoneGap是所有的HTML,CSS和JavaScript。 所以,你可能会感到宾至如归。 PhoneGap可以处理GPS位置,请参阅PhoneGap文档中的这篇文章。 你是否想要拾取Objective C将取决于你select新语言的速度有多快,因为这与Web开发有一点偏差。
这完全取决于你的需求
在发布我的第一个应用程序几个月后(原生的Android,数据库驱动,宁静的连接应用程序),我决定用phonegap重写我的应用程序(因为我想克隆应用程序到iOS,所以而不是在ObjC做,为什么不JavaScript) ?)
在Android上,我花了一个Java开发人员,花了3周的时间学习和编写所有的东西。 把我的头靠在墙上几次,让我的服务器如何使ListAdapter与Restful Service同步,如何为应用程序提供主题(在我看来很难,特别是当涉及透明,边框等特殊效果时)。 )以及如何有效地构build代码库(如果您熟悉Java,则会发现所有类都相互耦合,因为大多数教程都是这样写的)
在Phonegap上时,一切都在一周内完成。 Css,html, onsenui
和angular
使GUI的开发就像大约一年级的学生的任务和主题只是一小块蛋糕。 我不需要在真实设备上运行它,只需在开发过程中使用浏览器,更改代码和刷新就足够了。 Angular
提供了2种与DOM绑定的方式,这在收集和显示数据的时候非常棒。 例如:
<ul ng-each="for sentence in sentences" > <li>{{ sentence.title }} </li> </ul>
当variablessentences
被改变(从服务器检索)时,DOM也自动改变。 但是,JavaScript只是JavaScript。 我发现自己在debugging应用程序的时候苦苦挣扎,尤其是在使用PouchDB做MapReduce函数时(大错误,今晚必须回到cordova-sqlite-plugin
),而且大部分时间,我必须读取日志以便找出问题(Chrome的工具和Firebug无法捕捉到断点)。 另外,很难重构你的应用程序(再一次使用javascript),所以如果你没有在第一个符号处仔细组织你的代码库,那么你可能会陷入一片混乱(而debugging又是一个真正的痛苦)。 PhoneGap也是基于Web的,所以有时候你会听到“因为在这个平台上,它不支持Bla bla bla”(例如localStorage
),如果你找不到任何好的插件,你必须站出来。
结论除了基于networking存储的限制之外,PhoneGap在数据库驱动的简单的GUI应用程序(以及大多数数据库驱动的应用程序目前无论如何都有一个简单的GUI)上工作得非常好。 如果你要开发这种应用程序,然后坚持下去
检查出使用离子 ,由angular.js支持来抵消在接受的答案中提到的一些缺点。 启动员工目录应用程序教程: http : //coenraets.org/blog/2014/02/sample-mobile-application-with-ionic-and-angularjs/
另外还有AppGyver类固醇,可以很好的统一PhoneGap和Native UI。
使用类固醇,您可以添加像本机标签,本地导航栏,本地animation和转换,原生模式窗口,原生抽屉/面板(Facebook的一面菜单)等东西到您的PhoneGap应用程序。 基本上,任何地方,CSS + JS都不会削减它,Steroids进入本地层执行操作。
此外,类固醇,你可以(虽然你不必)使用多页面架构(多个网页浏览),而不是单一的。 对于单页面应用程序,所有类似于转换的东西都只是CSS解决方法,正如Mani所说,即使是现代的平板电脑和手机也不足以使其平滑。 当它是一个phonegap应用程序,尤其是当你有一堆进程,或者如果你滚动,因为JS进程受到侮辱(在iOS 8中修复)时,它总是很明显。
使用多页面体系结构意味着你获得了100%的本地性能(因为这些部分实际上是本地的)。 与phonegap不同的是,您将获得一致的用户界面行为和更容易的debugging(使用单个页面应用程序,通常很难在应用程序中重新创build特定的状态)。 由于您的代码库保持清洁,因此多页面可以更轻松地开发和维护您的应用程序。
检查演示:http: //youtu.be/oXWwDMdoTCk?t=20m17s
我也在这里find一篇好文章,它将这两种方法在不同的类别中进行了比较。
总结如下:
- 接口devise (相同)
- 成本 (混合有优势)
- 发展时间表 (混合有优势)
- 用户体验和性能 (Native有优势)
- 可维护性 (相同)
- 没有限制 (本地有优势)
- 安全 (相同)
- 支持和资源 (Native有优势)
- 工具和debugging (Native有优势)
- 平台无关 (混合有优势)
- 人气 (相同)
@Gajotres写了一个很好的回应,但自2012年以来,混合应用程序的性能已经走了很长的一段路。我回答了一个相关的问题 ,涵盖了2017年混合应用程序和本机应用程序开发之间的区别。
这个故事的寓意是,混合应用程序的开发在过去的几年中有了很大的提高,但是在某些用例上仍然不能与本地的应用程序相匹配。
借助Ionic( 2013年首次发布)和React Native( 2015年首次发布)等工具,使用类似本机的组件构build混合应用程序变得前所未有的简单。 混合应用程序现在更快,更lessbug,并能够与本地用户界面进行更深入的交互。
混合应用程序性能的门槛远远高于几年前,但仍然有一点你可能需要以本地语言开发你的应用程序。
原始答案:
是的,一般情况是混合应用程序不如原生应用程序。 虽然这对于更熟悉networking技术的开发人员可能会感到沮丧,但确实有很好的理由:
- 无法与本地组件进行交互 :尽pipe存在诸如
cordova-plugin-statusbar
,但使用web技术与本地组件进行交互并操作本地组件时存在限制。 我个人遇到的一个很大(也是令人沮丧的)问题是无法在键盘的顶部input键盘input。这听起来像是一个不解之词,直到你看到一个应用程序,这是一个重要的function,如在一个像Slack聊天应用程序。- 300ms的延迟 :尽pipe现代浏览器已经开始逐步淘汰 ,但Hybrid应用程序中的第二个延迟部分会使应用程序感觉速度变慢,而非原生。 随着越来越多的用户采用FastClick.js等解决方法, Ionic等一些框架在默认情况下将其消除,这个问题正变得越来越不重要。
- 这些仇恨是正确的(有点) :虽然混合应用程序开发已经走了很长的路,但仍然存在一些轻微的故障和laggyfunction,只是没有出现在本机的应用程序。 屏幕转换,应用程序切换和电池寿命仍然是缺陷出现的常见区域,可能会持续一段时间,即使它们开始变得越来越不明显。
- 有一些很棒的本机解决scheme :对于像Swift这样的新语言,使用母语进行编码变得更容易。 也就是说,像React Native这样的工具,通过允许开发人员使用友好的技术(如JavaScript)进行编码,而将其编译为本机代码,这些工具就陷入了Native和Hybrid之间的灰色地带。
这个故事的寓意是它确实取决于你的具体用例的重要性。 混合应用程序已经成为一个可行的select,不再是一个尴尬的副秀。 反过来说,除了Native应用程序,还有一些与Native UX交互的方面还不可能。
总的来说,我build议将您的项目映射出来,并确定您的应用程序是否需要本机应用程序的任何好处。 借助Ionic View应用程序等工具,您可以轻松地将您的应用程序的基本样机与实际设备进行testing,无论混合应用程序是否适用于您。
一个被忽视的伟大的select是与Xamarin发展。
虽然它不利于OP的网页开发技能,但它与PhoneGap相比有许多优点,而且几乎没有缺点。
Xamarin vs PhoneGap优点:
- 成熟的框架提供访问移动设备的大部分(如果不是全部的话)本地function。
- 只为所有移动平台学习一种语言(大多数开发人员使用C#)。
- 在iOS / Windows Mobile上具有原生应用程序的性能(因为应用程序编译为本机代码),并且在Android上非常接近(它仍然编译为本地APK,但必须具有可以转换.NET类库API的薄包装器到运行时的Android类API)。
- 由Microsoft维护,支持平台本身的整体慷慨质量和开发工具。 例如,你将使用Visual Studio,它可能是最好的IDE,现在有免费的社区版,每一个function都可以用于Xamarin开发。
Xamarin vs PhoneGap缺点:
- 纯Web开发人员需要一些时间投入,以切换到C#和Xamarin类库API。
因此,Xamarin是目前跨平台开发的一个非常稳固的select。