移动应用之争
简介
移动应用和 HTML5 是目前最热门的两项技术,两者之间有很多重叠之处。Web 应用在移动浏览器中运行,也可以在各种移动平台上重新打包为原生应用。由于需要支持各种各样的平台,再加上移动浏览器的强大功能,开发者纷纷转向 HTML5,将其作为“一次编写,多处运行”的解决方案。但这种方法真的可行吗?采用原生开发仍有其充分的理由,显然,许多开发者也确实选择了这条路线。本文是一篇关于原生应用与 Web 应用的辩论。
功能丰富性
要点:原生广告可以做得更多
我们可以从两个维度来划分移动功能:应用本身的体验,以及应用与设备生态系统的连接方式,例如,对于 Android,这将是微件和通知等功能。原生广告在这两个维度上都表现出色。
在应用体验方面,原生应用可以做得更多。对于支持滑动事件的平台, 他们甚至可以轻松获取滑动事件和多点触控。 它们通常可以对按下的实体键(例如 Android 的搜索按钮和音量控件)执行操作。它们还可以访问硬件,例如 GPS 和摄像头。在获得用户许可的情况下,某些平台会提供对操作系统的无限制访问权限。不妨尝试使用 HTML5 检测剩余电量!
不过,这不仅仅是应用内体验。Android 等操作系统为应用提供了不同的方式来与用户以及其他应用进行交互。您的首页上有活跃的微件。您有通知,这些通知会显示在设备的状态栏中。此外,您还可以使用 intent,让应用声明自己提供其他应用偶尔可能需要的常规服务。
反方观点:原生功能可以增强,而且 Web 无论如何都在迎头赶上
确实,许多应用内功能是 HTML5 应用无法实现的。无论您的 Web 技能有多高,如果您的应用被困在没有相机 API 的沙盒中,它就无法在短时间内拍摄快照!幸运的是,您不必身处那个沙盒中。如果您确实需要 Web 应用来拍照,可以创建一个原生应用,其中包含一个嵌入式 Web 视图,该视图提供大部分界面。这就是开源 PhoneGap 框架的运作方式:它通过将原生功能公开为 Web 服务来填补这一空白,Web 视图使用标准网络 API 调用这些服务。构建此类混合应用时,您还可以利用这些平台功能,例如微件、通知和 intent。
制作混合应用(原生加 Web)很难说是一种理想的解决方案。它会增加复杂性,并且仅适用于封装为原生应用的 Web 应用,而不适用于通过移动浏览器访问的传统网站。但可能很快就不需要了。Web 标准正在快速发展,现代移动浏览器也在紧跟其步伐。 例如,离线存储、地理定位、画布图形和视频/音频播放功能在现代智能手机中都得到了广泛支持。甚至相机也开始得到支持 - 从 Android 3.1 开始,可以使用 Web 标准拍摄照片和视频。最新的 iOS 浏览器支持 WebSocket 双向流式传输,以及设备屏幕方向检测。
总体而言,移动设备正在不断演变。但网络也在快速发展。仅在桌面浏览器领域,就有五大主要浏览器供应商在以闪电般的速度推进标准演进并添加新功能。虽然将这些功能移植到移动设备并非易事,但其中许多功能已经进入移动浏览器。
原生应用是一个快速变化的目标,但 Web 应用正在缩小差距。
性能
观点:原生应用运行速度更快
原生应用无需处理 Web 运行时障碍。它们在接近硬件的层级运行,可以利用 GPU 加速和多线程等性能提升技术。
反驳:如今的 Web 运行时速度要快得多,而且大多数应用根本不需要那么快的速度
如果说近年来网络速度变快了,那只是保守的说法。V8 是 Chrome 附带的 JavaScript 引擎,在发布时是 Web 性能方面的一项重大发展,自那时起,它的速度越来越快:
图形渲染引擎也加快了网页加载速度,现在硬件加速也开始发挥作用。我们来看看硬件加速画布带来的速度提升:
此外,新的 Web Workers API 使多线程成为可能,现代 Web 开发者还可以调用一系列经过性能优化的库和经过充分研究的性能优化技术。虽然其中大多数工具最初都是针对桌面版网站开发的,但它们仍然适用于移动设备,并且人们对移动设备的关注度也在不断提高,例如,性能专家 Steve Souders 就有一个专门介绍移动性能工具的页面。
并非所有桌面端先进技术都已应用到每个移动平台,但趋势表明它们正在逐步普及。此外,请务必注意,大多数移动应用都不是前沿的 3D 游戏,而是基本上以信息为基础:新闻、邮件、时间表、社交网络等。通过移动设备访问一些网站(例如 Gmail、Amazon、Twitter),您会发现移动网络性能绰绰有余。至于游戏,基本的 2D 画布已经可行,WebGL 也开始出现在移动设备上,例如 Firefox 4。在 WebGL 普及之前,越来越多的框架可以将 WebGL 应用编译为可利用 OpenGL 的原生应用,例如 ImpactJS。
开发者体验
观点:原生应用更易于开发
原生应用使用强大的编程语言(例如 Java、Objective C、C++),这些语言专为复杂的应用开发而设计,并且拥有良好的记录。这些 API 经过全新设计,旨在支持手头的平台。您可以在桌面模拟器中轻松调试应用,这些模拟器可提供与目标设备非常接近的表示。
Web 开发之所以特别麻烦,是因为浏览器和运行时环境多种多样。当您的应用运行时,无法保证功能 X 可用。即使是,浏览器又将如何实现它?标准可以有不同的解读。
反方观点:Web 通常更易于开发,尤其是在面向多种设备时
我们先来探讨核心技术。的确,Web 标准最初是在 Web 基本上是文档而非应用的时代构想出来的,JavaScript 仅用了 10 天就构建和部署完成!但事实证明,它们的能力远超想象。Web 开发者已经学会了如何利用其优势并克服其劣势,并掌握了可扩展设计的模式。此外,标准并非一成不变,HTML5、CSS3 和 EcmaScript Harmony 等工作都在改善开发者体验。您更喜欢 C++、Java 还是 JavaScript,这是一个见仁见智的问题,也取决于您的旧代码库。但如今,JavaScript 绝对是一个强有力的竞争者。
浏览器/运行时碎片化的另一面是,所有这些环境首先存在。如果您使用 Java 开发 Android 应用,则需要将其完全移植到 Objective C 才能支持 iOS。开发一个 Web 应用,它就可以在 Android 和 iOS 上运行,更不用说 WebOS、BlackBerry、Windows Mobile 等了…好吧,这只是理论上的情况。在实践中,如果您真的想获得良好的体验,则需要针对每个平台进行调整。 但对于大多数移动操作系统,您也必须在原生应用中这样做,因为有不同的版本和不同的设备。
好消息是,Web 上的“碎片化”一直都是这样,并且有众所周知的技术可以应对。最重要的是,渐进增强原则敦促开发者首先以基本设备为目标,并在可用时添加特定于平台的出色功能。功能检测的理念也很有帮助,如今,我们有来自 Modernizr 等库的支持,可支持自适应网页设计。通过合理运用这些技术,您可以将覆盖范围扩大到绝大多数设备,甚至包括老式“非智能手机”,以及手表和电视等设备,无论其品牌和操作系统如何。请观看我们在 Google IO 2011 上的多界面演示,其中我们使用通用的逻辑和标记代码库,针对不同的设备类型(非智能手机、智能手机、平板电脑、桌面设备、电视)进行了演示。
外观和风格
要点:原生广告与平台的外观和风格相契合
任何平台的一个决定性特征都是其外观和风格。用户希望控件以一致的方式呈现,并以相同的方式进行操作。有些惯用操作因平台而异,例如,当用户执行“长按”(持续触摸某个元素几秒钟)时会发生什么?平台对此类内容有标准惯用语,您无法通过单个 HTML5 应用满足所有这些惯用语。
此外,平台的外观和风格由平台的原生软件库进行编排,其微件封装了用户期望的外观和风格。只需使用原生工具包,您就可以“免费”获得许多预期的外观和风格。
反驳:网页有自己的外观和风格,您也可以针对您最关心的平台自定义网页界面
如上一部分所述,Web 开发的方式是编写一个基本的“一刀切”版本,然后逐步增强它。虽然增强功能通常基于功能,但您也可以通过定位到您最关心的平台来增强功能。这是一种“浏览器检测”,有时会遭到网络社区的反对,主要是因为可能存在太多浏览器。但如果您确实非常看重两三个平台,并且愿意付出额外努力来与原生替代方案竞争,那么这可能是一个不错的选择。
就基准版本而言,Web 有自己的外观和风格,我们甚至可以说,每个移动平台都有自己的“Web 外观和风格”,由默认浏览器和 Web 运行时建立。“Web 外观和风格”可能适合您的用户,事实上,它可让您与桌面浏览体验以及用户可能正在使用的其他设备上的浏览体验实现更高程度的一致性。此外,许多成功的应用并不太支持原生外观和风格。游戏当然也是如此(您最喜欢的手游是否遵循移动操作系统的外观和风格?),甚至更传统的应用也是如此,例如,在您选择的平台上查看更受欢迎的原生 Twitter 客户端,您会看到各种各样的界面机制。
曝光度
观点:原生应用更容易被发现
近年来,Android 的 Market 和 Apple 的 App Store 等应用分发机制非常受欢迎,是整个移动行业的主要推动力。任何开发者都可以向该市场提交其原生应用,用户可以通过浏览、搜索和获取推荐等方式发现这些应用。不仅如此,如果您做得好,好评和评论会说服用户点击至关重要的安装按钮。
反驳:实际上,Web 应用更容易被发现
网络可以说是迄今为止可发现性最高的媒介。在不起眼的网址中,我们(至少在理论上)为网络上发布的所有内容(包括在标准网站上发布的任何应用)提供了一个唯一标识符。搜索引擎可让用户轻松发现这些内容,其他网站也可以链接到这些内容,包括类似于移动应用市场的 Web 应用目录。事实上,任何人都可以通过在电子邮件和社交网络消息中添加链接,与朋友分享 Web 应用。链接也可以通过短信发送,移动用户可以点击链接并在其设备的浏览器中启动应用。
我们还没有类似的平台,让用户可以对应用进行评分和评论,但这种情况也在发生变化。继续阅读…
创收
要点:原生广告可以创收
“6 岁儿童在午餐时间制作应用,以每个 3 美元的价格售出无数个”。最近,您经常会看到这样的标题,因此,无论规模大小,开发者都希望通过移动市场实现变现,这也就不足为奇了。移动平台为开发者提供了多种直接向用户收取应用费用的途径。最简单的是一次性付款,可永久解锁应用。某些平台还提供应用内支付和订阅机制,这些机制以一致、安全的方式紧密集成。这些较新的支付方式可让开发者将爆款应用转化为长期收入来源。
除了应用付款之外,您还可以通过传统的网络模式(例如广告和赞助)创收。
反驳:在网络上变现一直都是可行的,而且机会越来越多
如果无法从中获利,网络就不会成为现代产业的引擎。虽然直接的“按使用付费”机制尚未蓬勃发展,但在各种细分市场中,基于订阅的“软件即服务”解决方案确实已变得可行。例如 Google 应用、37Signals 的一系列产品以及各种电子邮件服务的高级版本。此外,直接付款并不是通过 Web 应用获利的唯一方式。有线上广告、联属营销链接、赞助、交叉推介其他产品和服务。
话虽如此,Web 开发者在看到这些新闻时,难免会有些羡慕。您无法向原生应用商店提交网址,那么 Web 开发者该怎么做?您需要为每个目标平台创建一个原生“封装容器应用”,即一个仅包含 WebView 的空原生应用。Web 视图是您嵌入真实应用的地方。然后,您只需将这些应用提交到各个市场(并希望看到资金滚滚而来!)。如今,在主流应用商店中,可能存在数百甚至数千个由 Web 技术驱动的应用,其中一些应用伪装得如此巧妙,以至于我们甚至根本不知道它们是 Web 应用。
缺点是需要为每个平台进行交叉编译。这时,PhoneGap 等现有框架就能派上用场。 更棒的是,还有 PhoneGap Build 和 Apparatio 等 Web 服务正在开发中。将这些网站指向您的代码库,即可生成 Android 应用、iOS 应用等,供您提交到相应的商店。无需在机器上安装原生 SDK;您只需一个代码编辑器和一个网络浏览器,即可构建所有这些原生应用。
应用商店是否会直接支持 Web 应用,而无需进行原生封装?目前尚不清楚。我们知道,Google 去年推出了 Chrome 应用商店,虽然它仅适用于桌面设备,但该商店已引起其他浏览器供应商的兴趣,并且总体上属于 Web 应用目录趋势的一部分,包括一些针对移动设备的尝试。 应用商店的概念尚处于初期阶段,但前景看好。
总结
如果能在这里宣布一个胜出者,那将是一件好事,但目前还没有明显的胜出者。有些应用最适合原生开发,有些则最适合 Web 开发。Web 堆栈的发展势头可能更强劲,但就功能和执行质量而言,原生应用也在快速发展。除非有一天,Web 技术在大多数移动操作系统上成为一等公民,否则原生技术始终是一个重要的考虑因素。
本文中提到的一种技术是混合应用,这可能是某些开发者的最佳折衷方案:在可能的情况下使用 WebView,在不可能的情况下使用平台特定的原生组件。
如果您选择 Web 路径,请注意 Web 标准和渐进增强原则。Web 是一项技术,它知道如何定位周围的众多设备和操作系统。无论您选择将其称为“碎片化”还是“多样性”,Web 都会拥抱它,而开发者可以从所有现有技术中受益。