应对“原生应用 vs HTML5”移动应用之争

12

我是一名iOS(原生)开发人员,自App Store推出以来就一直从事这方面的工作。此后,我也学习了一些Windows-Phone和Android。我注意到HTML5 Web应用程序取代本地应用程序的趋势不可避免,并且它的增长速度比我预期的要快得多。作为一个本地开发者,这让我感到沮丧,因为大多数时候选择原生开发有很多优点,只有一些例外情况才选择HTML5(例如:跨平台!),但是这些例外情况似乎能够越来越多地压倒前者,有时则是出于无效的原因。

我不认为移动应用程序的“未来”在于HTML5,也不认为像PhoneGap这样的工具可以实现跨平台的大规模分发。与本地应用程序相比,Web应用程序的体验总是稍逊一筹,而且还会流传很多谬论。例如,“客户不会为多个平台上的本地开发付款;太昂贵了!”这是一个谬论,如果客户真正了解他们获得的应用程序质量差异,他们肯定会支付更高的费用。这已经被业界的领导者反复证明,他们大多数情况下不会为客户构建Web应用程序。我甚至知道有一次几乎发生了诉讼,因为一位CEO获得了他们外包的应用程序,结果是一个PhoneGap/HTML5应用程序。他(完全)感到愤怒,因为那家公司承诺提供“一款应用程序”,但它并没有像他的其他应用程序一样感觉或响应,从而导致一场混乱。

其他一些误解包括转向HTML5路线可以节省大量代码和时间,但事实并非如此。在跨平台/设备测试中涉及的CSS和JavaScript量以及让应用程序在这些平台上运行所需的工作通常会导致代码混乱,并花费大量时间调试相关问题。一个典型的本地开发人员可以在几个平台上仅用数小时创建简单的基于列表的导航/详细视图,而构建HTML5来“模拟”和仿造完全相同的功能和外观/感觉很可能需要大约相同的时间。此外,选择PhoneGap/HTML5路线后,您始终会落后于平台和技术的前沿,这怎么办呢?
我最大的挫折是,现在似乎有些开发商有时甚至向客户推荐PhoneGap/HTML5方法,使其具有跨平台等吸引力,而无需真正向客户(有时可能毫不知情)解释它实际上涉及到性能和外观/感觉方面的差异。
我肯定想跟上时代的步伐并为最坏的情况做好准备,这就是我正在学习这些工具的原因,但我只是好奇你们(同样是本地开发人员)如何处理这种情况?我在这方面的想法是否孤单?有没有建议如何以合理的方式向人们解释如何做出这个决策过程?在我开始回复之前,请注意,我完全理解在某些情况下Web应用程序是正确的选择,我也完全理解有些客户只愿意为原生开发付费,这没有问题。 我也知道预测表明HTML5应用程序的比例将随着年份的推移而继续上升。 然而,我仍然不同意“所有应用程序都应该是HTML5,并且我们只有在需要时(例如相机等)才使用本地部分”的增长心态。 我个人认为应该反过来:“除非特定的UI和功能在HTML5中更容易/更快速完成,否则所有应用程序都应该是本地的”。 公司可以找到编写快速并且能够访问代码库的本地开发人员,使得原生开发与通过Web应用程序进行开发相比同样快,甚至更快。
你有什么想法?如果这是错的论坛,我提前道歉,但我很渴望听取意见和建议。谢谢! -文森特

1
这是一个非常重要的问题,我建议其他人适当地点赞此问题。 - Code Droid
5
似乎更像是一篇倡导性的文章,而不是一个问题。 - steveax
4
你需要认真考虑你的假设。把行业趋势看作威胁会对你造成伤害。更好的做法是熟悉相关技术,以便为客户提供最佳解决方案,并公正地向他们介绍两种方式的优缺点。你的偏见在你的写作中很明显,客户也会察觉到。如果你不能更加灵活,你将被划分为“iOS专家”。 - Julian
朱利安,你对客观性提出了很好的观点。但我理解这个问题的方式略有不同。我认为作者的意思是说,选择HTML5的基本假设通常是错误的,并且实际上基于成本和跨平台支持的感知会形成HTML5偏见,而这种感知经常是错误的。因此,帮助客户的一部分工作就是能够确定他们在哪种情况下更适合使用其中一种技术而不是另一种技术。 - Code Droid
除了速度之外,“与本地应用程序相比,Web 应用程序的体验始终会低于标准”这种说法是否真实呢?考虑到最近 JS 库的激增,使得 Web 应用程序感觉像本地应用程序一样,这种说法还成立吗? - Mark Boulder
显示剩余2条评论
4个回答

10
这里有一个简单的案例,说明为什么选择原生应用程序而不是HTML5。从技术上讲,没有什么能阻止基于浏览器的解决方案变得和基于本地的解决方案一样强大,但这永远不会发生,原因在于:涉及到的厂商——苹果、谷歌和微软没有动力使这种情况发生。想想看,如果他们完全标准化了这个问题,那么他们的平台就几乎没有任何优势了。以消息服务为例,你当然可以通过HTML5提供最好的苹果或安卓消息服务,但为什么平台供应商要采取这种方式呢?为什么他们要贬低iOS SDK或Android SDK的价值呢?所以这实际上就像在移动领域玩浏览器战争一样。当浏览器战争开始时,每个人都认为超级浏览器会出现,但它从未出现,这次也不会出现,原因相同。所以,这不仅仅是一个技术问题,如所描述的那样,开放与封闭。事实上,这是因为供应商不会以开放的方式提供他们最新和最伟大的产品。这就是为什么大多数跨平台解决方案落后于供应商发布的原因之一。
另一个例子是WebGL的支持。WebGL的支持时间比应该长得多。一旦有比WebGL更好的东西,它将首先在本机上提供,然后WebGL最终将在所有浏览器上得到完全支持,在每个主要设备上都能使用。但是支持总是会落后于本地。关键是基于浏览器的解决方案永远落后一步,因为这是供应商喜欢的方式。
此外,请注意,许多应用程序客户认为采用HTML5实际上更符合网络/互联网标准,而实际上本地应用程序和HTML5应用程序一样使用HTTP。这是一个常见的误解,因为大多数本地应用程序像HTML5应用程序一样使用通过HTTP访问的服务。唯一的区别是你用JavaScript处理请求和响应,而不是本地方式。
安全性是另一个需要考虑的重要问题,有多少安全应用程序使用HTML5?我敢打赌,大多数进行安全交易的应用程序都是本地的,而且理由充分。
如果人们能提供Android或iOS最近发布的功能的示例,以及PhoneGap对这些SDK功能的支持水平和路线图,那将非常有用。换句话说,当SDK的新版本发布时,PhoneGap和Titanium并不是同步的。然而,我认为PhoneGap是本地解决方案的主要竞争对手,因此将其与本地进行比较将是最有意义的。我认为将本地与跨平台的专有SDK进行比较是浪费时间的。这永远不会足够有吸引力,以至于让PhoneGap或原生应用程序失去竞争优势。
对于那些对PhoneGap感到兴奋的人,需要注意一点。内置插件可能存在于您需要的所有平台上,但是如果您需要为PhoneGap编写自己的插件呢?(您即将了解PhoneGAP中GAP背后的真实故事)无论是因为您想要执行与现有插件完全不同的操作还是因为您想要自定义现有插件。这不是“编写一次,随处部署”的场景。您需要为每个想要该功能的平台编写自定义插件。换句话说,您又回到了本地开发。因此,您最好花时间仔细评估插件(在您将在其中运行HTML5应用程序的所有平台上),并确保它们现在和未来是您所需要的。另一方面,没有PhoneGAP的HTML5相当不稳定和受限,并且您很快就会发现自己在重写PhoneGAP。

另一个要点是,应用程序可以以多种方式进行交互,其中之一是使用HTTP。它还经常需要以最佳方式与设备上的操作系统和资源进行交互。更不用说用户了,他们真的不关心使用了什么底层技术,但是基于与许多本机应用程序进行交互而产生了很高的期望。

当您运行HTML5应用程序时,实际上是在另一个应用程序中运行应用程序,即浏览器。浏览器应用程序的功能只有平台供应商允许它具备的那么强大。如果历史是任何指南,它将发展并添加更多功能,但从技术和业务原因来看,永远不会最优化,也永远不会与所有其他供应商同步,并且永远不会以与底层操作系统和SDK相同的速度。

用户希望获得最佳体验,需要注意的是,虽然拥有Android的人很多,拥有iPhone和iPad的人也很多,但同时拥有两者的人相对较少。换句话说,Android用户可能根本不关心您的iOS版本应用程序,而iOS用户可能根本不关心您的Android应用程序。但是用户真正关心的是应用程序在他们首选平台上的运行情况。他们不想要在两个平台上都运行一半的东西,因为他们从未在两个平台上都看到过它。用户几乎总是在单个平台上体验应用程序。

就本地解决方案与HTML5的定位而言,我认为关键是让决策者认识到,喜欢本地开发的不仅是本地开发人员,还有平台供应商。这意味着与操作系统改进同步制作更好、更高质量的应用程序。反过来,这意味着拥有更好移动体验的快乐应用程序用户。


2
读起来像是一个铝箔帽手册。 - JustSid
2
直到你戴上思考帽! - Code Droid
这就是你意识到在浏览器外运行东西可能不是最好的想法,因为存在性能和安全方面的原因的时候。 - JustSid
值得注意的是,尽管许多用户拥有Android设备,但很少有人购买应用程序。因此,如果您已经是经验丰富的iOS开发人员,仅为迎合Android选择跨平台解决方案可能不是一个好主意。只需谷歌搜索“Android与iOS应用销售情况”,您将找到大量论坛帖子,在那里人们会为iOS销售数千份副本,而在Android上只有1份(但随后开始接收来自Android客户端的网络请求....盗版!) - G. Shearer
你提到了很多关于平台供应商限制浏览器能力的内容,那么Web浏览器是如何取代本地PC应用程序的呢? - Lewis

3

我认为我在某种程度上能理解你的问题。我曾经开发过本地Android应用程序,我们公司就跨平台开发进行了很多讨论。

根据我的经验,在构建一些严肃的应用程序时,诸如Phonegap、Appcelerator或Adobe Air等许多移动跨平台解决方案失败了。也许这些解决方案将来会变得更好。

目前,我为开发移动应用程序推荐以下内容:

  • 非常简单的应用程序(只有几个视图),没有特殊要求:使用Phonegap。 Phonegap可以处理简单的应用程序,并提供“跨平台”解决方案。
  • 任何稍微复杂一点的应用程序(需要大量服务器通信、同步等):使用Native。 在这种情况下,本机应用程序的API /性能/调试工具通常比“跨平台参数”更有利。

移动网站有些不同。 在许多情况下,已经存在一个“正常”的网站,只需要为移动设备进行清理和优化。 在这种情况下,您可以使用现有的代码/接口,这可以节省大量时间。


我同意对于一些简单的应用程序可以使用跨平台开发。但是,如果应用程序需要某些高质量的图形,仍然最好使用原生开发。但请确保客户意识到,如果他们的应用程序发展壮大,可能需要重写为原生开发。 - Code Droid
在移动网站的情况下,重新利用现有的网站并不总是可行的。即使是网站使用的服务也经常不适合于移动设备。 - Code Droid
@CodeDroid 经常是真的 - 但这并不是移动浏览器的错。编写不良/不灵活的网站总是会被困在原地。 - Basic
如果涉及到更复杂的事情(例如大量的服务器通信、同步等),那就选择原生开发吧。或者你也可以使用Rails应用程序并创建自己的API,这样会让你的代码更加简洁美观。 - Mark Boulder

0
这就像是“哪种编程语言将在未来胜出?”或者(低声下气)vi vs emacs的问题一样。制作应用程序有不止一种方法。原生应用程序有其优点,HTML5也有其优点,这取决于问题和开发人员的技能水平。我建议你熟悉两种工作流程,这将更好地使你有资格在未来提出建议,并接受他人的意见。

正如我在帖子中所述,我正在熟悉这两种工作流程,并且我非常开放地接受一种可行的平台,以便创建应用程序。我的观点是,本地开发似乎“失利”的原因并不是可行的原因,我想听听如何解决的意见。我不是在问哪种语言将来会胜利;我坦率地说我对两者都很熟悉。并不是说你是这些人之一,但是提醒其他回复者 - 我不感兴趣HTML5 / PhoneGap狂热者,他们会因为这篇文章支持本地而给它打低分。 - svguerin3
Yusuf,你为什么不分享一下你的看法,关于何时使用HTML5而不是本地应用程序。 - Code Droid
1
当你有一个简单的应用程序需要移植到多个平台,但资源和时间都不充足,而且使用了HTTP时,HTML5是最容易的选择。一旦不满足这些条件中的某些条件,那么就是考虑本地化的时候了。 - Yusuf X

0
一些其他重要问题。是否会有一个伟大的元编程方式?像钛或Java最初的想法一样。此外,有些东西最好本地实现,例如地图。此外,CPU和内存的增加使得一些支持本地的论点变得不那么相关。

我认为这里的重点是,即使你想要一种通用的方式来制作应用程序,JavaScript 似乎并不是最佳选择。而 JavaScript 是 HTML5 中的关键语言,与 CSS3 一起使用。 - Code Droid
你打算从哪里获得供应商的支持,以完全支持跨平台方法,即使它可以被开发出来? - Code Droid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接