在原生和 phonegap 之间挣扎,简单的应用需求

Posted

技术标签:

【中文标题】在原生和 phonegap 之间挣扎,简单的应用需求【英文标题】:Struggling between native and phonegap, simple app requirements 【发布时间】:2012-12-13 11:43:39 【问题描述】:

我要制作一个原生(意思是;不在浏览器中)移动应用。由于我是一名网络开发人员,我正在努力决定是应该尝试 Phonegap 还是只使用 java 或 Objective-c 构建本机应用程序。

应用要求很简单。 GPS/wifi 位置,Facebook 集成,我想我需要一个数据库来处理一些特定于应用程序的 Facebook 朋友关系。比如游戏中的高分——诸如此类。

我是一名网络开发人员,但还不知道 java 或 Objective-c。之前没用过Phonegap,不知道能不能满足我的要求。

所以我的问题如下; 我可以在我的应用程序中使用 Phonegap,还是需要深入学习一门新语言?

【问题讨论】:

时间是最重要的因素,这就是为什么我会使用 phonegap,尽管页面转换不起作用。 ...或者只是用 java 或 Objective-c 构建一个原生应用程序。如果您在这些平台上没有经验,构建这些应用程序可能需要一些时间。 这取决于应用程序的复杂性。如果它主要是具有简单功能的静态页面,例如访问 GPS 位置或相机拍摄个人资料照片,那很好。在低端设备上,在任何平台上,您仍然会遇到性能问题(在 ios 上较少,但仍然如此)。任何具有大量持久数据存储、解析、文件系统操作、大量页面、长项目列表的中型/大型的东西,都是原生的。如果您仍然不确定,请在任何平台上启动任何应用程序商店并寻找 html5/混合应用程序并对其进行测试。如果你喜欢他们的表现,那就去吧 【参考方案1】:

相关:

这篇文章的大版本也可以找到HERE,透明的是我的个人博客。

混合与原生应用

混合应用:

专业版:

更快的开发,特别是如果您是一名长期的 Web 开发人员。 可以在每个可用平台上使用一种语言。当然,这需要一个 Phonegap 包装器。您无需学习 Objective C、Java 或 C# 即可进行任何开发。您只需要了解 Phonegap 实现的基础知识。您将需要稍微了解一下上述语言,但您不需要理解它们。 Phonegap 可以提供一些原生功能,例如 iOS 原生标签栏或 android 原生标签栏等等。 更低的预算成本和庞大的支持者和开发者社区。​​li> 混合应用程序提供了这两种方法的许多优点,可以访问最常见的设备 API,并且覆盖广泛的设备,同时不需要完全原生应用程序更典型的专业技能、更大的预算和更长的上市时间。

缺点:

一段时间后你会流血,无论是字面上还是比喻上。 移动电话(即使是今天的平板电脑)速度还不够快,无法流畅地运行混合应用程序,移动 javascript 功能充其量只是床。 Android 平台是一场噩梦,页面转换不流畅,更不用说缺乏 CSS/CSS3 实现了。如果您认为原生 Android 2.X 和 4.X 有差异,请查看 Android 2.X 糟糕的 JavaScript/CSS 实现。 iOS 表现更好,但仍然缺少 CSS3 实现,但页面转换要好得多。为了让这个简短的原生应用程序总是有更好的用户体验和总体感觉。 您将花费更多时间修复应用程序然后构建它。为每个平台创建一个应用程序是一件令人头疼的事情。不同平台上的浏览器并不统一支持所有最新的 HTML 功能和 API,这会给开发和测试带来挑战。 如果你没有优秀的设计师,就不要尝试构建应用程序;长相就是一切。 如果您不知道自己在做什么,那么您的应用很可能不会获得 Apple 应用商店的许可。如果 Google Play 商店发现了第 3 方 Phonegap PayPal 插件,他们也会禁止您的应用。

原生应用:

专业版:

原生移动应用可以产生最佳的用户体验 - 快速流畅,可以让您最好地访问设备功能,并且可以在应用商店中找到。 毫无疑问,原生应用程序可以完全访问底层移动平台。原生应用程序通常非常快速和完善,非常适合高性能应用程序或游戏。这已经足够了。

缺点:

更大的预算,如果你想要一个 Windows 移动应用程序,你将至少需要一个具有 Java 和 Objective C 知识的人,甚至 C#。是的,您可以自己学习,但不要幻想自己会在短时间内完成。 如果您从未做过任何开发,请选择 Objective C(iOS 仍然是一个更好的平台)。 在其他情况下选择 Java。 Java 的语法与其他可用语言相似,因此很容易从 C# 跳转到 Java,反之亦然。 Objective C 是它自己的世界。它有一个相当不常见的语法。 开发所有这些可能需要更长的时间,而且时间就是金钱。这取决于应用的复杂程度。

就您而言,如果您具有良好的 Web 开发/设计技能和/或优秀的设计师,您应该选择混合应用。只有当这个应用程序将是一个复杂的应用程序时才使用本机。您想要的一切都可以通过混合应用程序完成。您会发现一个很棒的支持社区。​​p>

混合应用

我之前没有提到你需要特别小心这里。即使您是经验丰富的开发人员,您也会发现很多您无法解决的问题。混合开发不应被误认为是基本的 Web 开发。

每个移动平台都有自己的一系列问题,更不用说手机的行为会因设备而异。如果可能,请始终创建一个在速度较慢的设备上运行的应用,因为原生应用几乎可以在任何设备上成功运行。

还有最后一件事,在创建混合应用程序时,应用程序开发将占用您大约 30%-50% 的时间,其余时间用于特定平台的调试和学习。相信我,即使经过几年的移动开发,有时我也会面临无法单独解决或不够快解决的问题。

所以在选择移动框架时要小心,选择 2-3 并花几天时间阅读它们。

链接

这里有几个链接可以帮助您做出决定:

PhoneGap + jQuery Mobile 1.4 tutorial - 这是 PhoneGap 和 jQuery Mobile 最新版本的分步教程

PhoneGap + jQuery Mobile 1.4 tutorial - MacOS version - 这是在 MacOS 上部署 PhoneGap 的分步教程。 jQuery Mobile 部分在上一篇文章中已经介绍过,不再赘述。

jQuery Mobile vs Sencha Touch - jQuery Mobile Sencha Touch 比较

jQuery Mobile vs Kendo UI - jQuery Mobile Kendo UI 对比

7 best known HTML5 mobile frameworks - 名字说明一切

7 less known HTML5 mobile frameworks - 名字说明一切

【讨论】:

AppStore/Market 中只能找到原生应用吗? 应用商店也欢迎混合应用,它们有时会被拒绝,但同样的事情也会发生在原生应用上。我的第一个混合应用程序被拒绝了,因为我使用的是第三方 paypal 插件,而 Apple 不喜欢这样。所以不用担心。 在过去的 10 个月里,我一直在用 js 和 Phonegap 构建一个中型大型应用程序,我希望我们已经成为原生应用程序。 Phonegap、js 和 HTML5 结合起来很痛苦,即使你得到了一些工作,在最新的 iPhone 和 Nexus 设备上体验也是可以接受的,但在其他任何东西上它都会让你把设备扔出窗外 我觉得很多这种说法——尤其是在性能方面——已经过时了。据我所见,Ionic 似乎融合了两全其美。 感谢您的意见,现在主要移动设备中的八核 CPU 是好事。简直比原生预算大,比PhoneGap低预算。它的明确取决于预算,但双向都有可能。【参考方案2】:

如果您的应用程序没有动画效果并且简单,我更喜欢在 web(Phonegap) cz 中创建更短的时间,我们可以在多种类型的移动操作系统中启动。 如果您的应用包含更多的 UI 效果和动画,那么最好使用原生。..

即使你使用 webview(Phonegap) 开发,你也需要学习一些 Android 和 iOS 的基本步骤

Phonegap 在设备中的表现如何

IOS ios webview中的动画和视图加载比较好,动画效果看得一清二楚

Android 我们在运行html代码的时候要考虑android的设备版本和设备公司,android中一些高配置的设备给出了更清晰高效的动画显示,但是一些设备(主要是旧版本和一些公司设备)不能给出很好的动画效果,在android中,渲染效果因设备而异,

【讨论】:

我想我很快意识到我想使用objective-c 或java 创建一个本机应用程序。如果“本机”Phonegap-app 只是编译为与 UIWebView 一起使用的 Webapp HTML/CSS/JS 文件,那么恐怕该应用程序将受到常规 webapp 限制的限制。无法利用本机 API。谢谢你的回答。 这不仅仅是关于动画,否则你只需要在低端设备/旧平台上关闭它们。整体稳定性、UI 响应能力、持久数据存储、性能问题会让你发疯 @HenrikSkogmo 您可以与硬件进行交互,这就是 Phonegap/Cordova 的全部目的。不过有一些限制,这取决于您想要实现的目标【参考方案3】:

以我的拙见,使用 Phonegap,您可以只开发简单的应用程序,仅此而已。文档是不够的,就像其他人说的那样,您将花费更多的时间来修复错误和寻找插件,而不是构建您的应用程序。我会努力学习 Android 或 iOS 或其他任何东西,将其视为您时间的投资。 (是的,我的评论有点偏颇)。

【讨论】:

我完全同意,Phonegap 和 HTML5 落后于移动开发的可行选择 这就是为什么在实践中你会将它与 Sencha Touch 或 Kendo UI 等其他东西结合使用。【参考方案4】:

最后我调查了一下,PhoneGap 都是 html、css 和 javascript。因此,您可能会有宾至如归的感觉。 PhoneGap 可以处理 GPS 定位,请参阅this article from PhoneGap's documentation. 你是否想学习 Objective C 取决于你学习新语言的速度,因为它有点偏离 Web 开发。

【讨论】:

【参考方案5】:

这完全取决于您的需求

在发布了我的第一个应用几个月后(原生 Android、数据库驱动、restful 连接应用),我决定使用 phonegap 重写我的应用(因为我想将应用克隆到 iOS,所以不要在 ObjC 中进行,为什么不是javascript?)

在 Android 上,我(一名 Java 开发人员)花费了 3 周的时间从头开始学习和编写所有代码。关于如何使 ListAdapter 与我的服务器上的 Restful Service 同步,如何为应用程序设置主题(在我看来这很难,尤其是在涉及透明、边框等特殊效果时,... ),以及如何有效地构建你的代码库(如果你熟悉 Java,你会发现所有的类都是非常耦合的,因为这是大多数教程所写的)

在 Phonegap 上,一切都在 1 周内完成。 Css, html, onsenuiangular 让GUI开发就像一年级学生的作业一样,主题化只是小菜一碟。我不需要在真机上运行,​​开发过程中使用浏览器,修改代码刷新即可。 Angular 提供与 DOM 的 2 种方式绑定,这在收集和显示数据时非常棒。例如:

<ul ng-each="for sentence in sentences" >
   <li> sentence.title  </li>
</ul>

当变量sentences 更改(从服务器检索)时,DOM 也会自动更改。但是,javascript 只是 javascript。我发现自己在调试应用程序时遇到了很多麻烦,尤其是在使用 PouchDB 执行 MapReduce 功能时(大错特错,今晚必须回到cordova-sqlite-plugin),而且大多数时候,我必须阅读日志才能弄清楚问题(Chrome 的工具和 Firebug 无法捕获断点)。此外,很难重构您的应用程序(再次是 javascript),因此如果您没有在第一个迹象时仔细组织您的代码库,您最终可能会陷入混乱(再次调试是一个真正的痛苦)。 PhoneGap 也是基于 Web 的,所以有时你会听到“因为在这个平台上,它不支持那个 bla bla bla”(例如,localStorage),如果你找不到任何好的插件,你必须支持它。

结论 除了基于 Web 的存储限制之外,PhoneGap 与数据库驱动的简单 GUI 应用程序配合得非常好(无论如何,目前大多数数据库驱动的应用程序都有一个简单的 GUI)。如果你要开发那种应用程序,那就坚持下去

【讨论】:

【参考方案6】:

使用ionic 进行检查,由 angular.js 支持,以抵消已接受答案中提到的一些缺点。启动员工目录应用的教程:http://coenraets.org/blog/2014/02/sample-mobile-application-with-ionic-and-angularjs/

【讨论】:

Ionic 不支持任何低于 Android 4.2 的版本,但更糟糕的是它处于 Beta 版。我一直在用 jQuery Mobile 和 jQuery 做噩梦,它们已经存在了很长时间,而且它们足够稳定,你能想象一个 Beta 框架吗? 不讨厌玩家,讨厌游戏 是的,很公平。我很想尝试一下 Ionic,但目前不能排除 60% 的 Android 用户 哦,快!我什至不知道这个问题。看起来他们将回滚以支持 4.0+,但采取了forum.ionicframework.com/t/… 仍有 20% 出局...我们支持 2.3+ 直到它低于 10%。我认为到那时框架将足够稳定;)【参考方案7】:

@Gajotres 写了一个很好的回复,但自 2012 年以来,混合应用程序的性能已经取得了长足的进步。我回答了一个 related question,其中涵盖了 2017 年混合和原生应用程序开发之间的差异。

这个故事的寓意是混合应用程序开发在过去几年中取得了巨大进步,但在某些用例上仍然无法与原生应用程序相媲美。

使用 Ionic(首次发布于 2013)和 React Native(首次发布于 2015)等工具,使用类原生组件构建混合应用程序比以往任何时候都容易。混合应用现在速度更快、错误更少,并且能够与原生 UI 进行更深入的交互。

混合应用程序性能的门槛比几年前要高得多,但仍然有一个时候您可能需要使用母语开发应用程序。

Original Answer:

是的,普遍的看法是混合应用不如原生 应用。虽然这对于更熟悉的开发人员来说可能会令人沮丧 网络技术,它确实有充分的理由:

    无法与原生组件交互:虽然有cordova-plugin-statusbar之类的插件,但还是有限制的 使用 Web 与原生组件交互和操作 技术。我个人遇到的一个很棒(也很令人沮丧)的问题 into 是无法在键盘顶部输入 键盘动画。这听起来像一个问题,直到你看 在这是一项基本功能的应用程序中,例如在聊天应用程序中 像 Slack。 300ms 延迟:虽然现代浏览器已经开始phase this out, 混合应用程序上存在的几分之一秒延迟使应用程序 感觉缓慢和非本地。这个问题变得越来越不重要,因为 更多用户采用变通方法,例如 FastClick.js 和一些 Ionic 等框架消除它 默认情况下。 反对者是对的(在某种程度上):虽然混合应用程序开发已经取得了长足的进步,但仍然存在一些小故障和滞后 本机应用程序中不存在的功能。屏幕 转换、应用程序切换和电池寿命仍然是常见的领域 错误出现并且可能会持续一段时间,即使它们是 开始变得越来越不引人注目。 有一些很棒的原生解决方案:使用更新的语言,例如 Apple 的 Swift,它变得越来越容易 本机语言的代码。话虽如此,React Native 等工具却陷入了灰色 允许开发人员在 Native 和 Hybrid 之间编写代码 JavaScript 等友好技术,但可以编译为原生代码。

这个故事的寓意是它真的取决于什么是重要的 您的特定用例。混合应用程序已成为一种可行的选择,并且 不再是尴尬的边秀。反之,仍有 与本机 UX 交互的次要方面 可以,除非使用本机应用程序。

总的来说,我建议您规划您的项目并确定您的 应用程序需要原生应用程序的任何好处。使用诸如 Ionic View 应用程序很容易放在一起 您的应用程序的基本模型并在真实设备上进行测试,无论是否 混合应用适合您。

【讨论】:

【参考方案8】:

还有 AppGyver Steroids 将 PhoneGap 和 Native UI 很好地结合在一起。

使用 Steroids,您可以将本机选项卡、本机导航栏、本机动画和过渡、本机模式窗口、本机抽屉/面板(facebook 侧菜单)等内容添加到您的 PhoneGap 应用程序。基本上,只要 CSS + JS 没有削减它,Steroids 就会进入原生层来执行操作。

此外,使用类固醇,您可以(尽管您不必)使用多页面架构(多个 web 视图)而不是单一的。对于单页应用程序,像过渡之类的所有东西都只是 CSS 变通办法,正如 Mani 所说,即使是现代平板电脑和手机也不够快,无法使其流畅。当它是一个 phonegap 应用程序时,这一点总是很明显,尤其是当你有一堆进程在运行时,或者如果你正在滚动因为 JS 进程被拖走(在 iOS 8 中已修复)。

使用多页面架构意味着您可以获得 100% 的原生性能(因为这些部分实际上是原生的)。与 phonegap 不同,您将获得一致的用户界面行为和更轻松的调试(使用单页应用程序,通常很难在应用程序中重新创建特定状态)。多页面使您的应用程序的开发和维护变得更加容易,因为您的代码库保持清洁。

查看演示:http://youtu.be/oXWwDMdoTCk?t=20m17s

【讨论】:

【参考方案9】:

我还在这里找到了一篇很好的文章http://www.comentum.com/phonegap-vs-native-app-development.html,它在不同的类别中比较了这两种方式。

总结如下:

    界面设计(相同) 成本(混合有优势) 发展时间表(混合有优势) 用户体验和性能(Native 有优势) 可维护性(相同) 没有限制(原生有优势) 安全性(相同) 支持和资源(Native 有优势) 工具和调试(Native 有优势) 独立于平台(混合有优势) 人气(相同)

【讨论】:

【参考方案10】:

这里被忽略的一个很好的选择是使用 Xamarin 进行开发。

虽然它对利用 OP 的 Web 开发人员技能没有帮助,但与 PhoneGap 相比,它有很多优点,几乎没有缺点。

Xamarin 与 PhoneGap 专业人士:

成熟的框架提供对大多数(如果不是全部)原生的访问 移动设备的功能。 只学习一种适用于所有移动设备的语言(大多数开发人员使用 C#) 平台。 在 iOS/Windows Mobile 上具有原生应用程序的性能(因为应用程序被编译为本机代码),在 Android 上非常接近(它仍然编译为原生 APK,但必须有一个可以翻译 .NET 的瘦包装器在运行时将类库 API 转换为 Android 类 API)。 由 Microsoft 维护,支持 平台本身和开发工具。例如,您将使用 Visual Studio,它可能是最好的 IDE,现在免费的社区版包含 Xamarin 开发所需的所有可用功能。

Xamarin 与 PhoneGap 的缺点:

纯 Web 开发人员需要一些时间投资才能切换到 C# 和 Xamarin 类库 API。

因此,Xamarin 是当今跨平台开发的一个非常可靠的选择。

【讨论】:

以上是关于在原生和 phonegap 之间挣扎,简单的应用需求的主要内容,如果未能解决你的问题,请参考以下文章

使用 PhoneGap/Cordova 时应用程序和服务器之间通信的最佳实践

将 phoneGap 与原生 iOS 应用程序集成

在用户不知情的情况下,将现有的原生应用与基于 cordova/phonegap 的应用交换

Javascript 和 Phonegap 插件之间的异步通信

PhoneGap 应用被拒绝 10.6

如何使用 phonegap 成为整个原生 ios 应用程序的一部分