我们正处在一个完全的移动互联网的时代,“移动”给了更多的可能,不管是对最终使用者,还是开发人员。那么,针对移动应用开发,是选择Native Aapps,还是Web Apps好呢,我本人做过一些研究和思考,同时在平时的工作中也经常被一些客户的技术总监问到这方面的问题,这里整理一些我的个人见解,供大家参考。限于个人水平,有些观点可能与各位相左,欢迎批评指教。
争论由来已久
我想说的是,即便早在PC的时代,开发本地应用(C/S 架构)和开发网络应用(B/S架构)也是一个很大的争议话题,当然时间已经证明,B/S最终占据了主流。当下很热的云计算,其本质上也是为了让用户能摆脱对本地资源的依赖。有意思的是,我们现在进入了移动互联网的时代,也同样面临着这样一个争论的话题,是做Native App呢,还是做Web Apps呢. 要回答这个问题,我想不是简单的非此即彼的答案,我们要从他们两者的特点展开了了解。
Native Apps
中文可以翻译为“本机应用”,顾名思义,它们是需要安装在本机(移动设备)上面的。我们一般通过各种App Store下载这种应用程序。例如,iPhone或者iPad用户所看到的App Store是下面这样的:
插播一个有意思的小段子:我记得很久以前,我去给一些客户介绍手机App应用以及App Store的时候,不少Android的用户,听不懂App Store的意思,因为他们认为App Store就是指苹果的Store(Apple Store),这当然是一个小误会。Android用户当然有自己的App Store,只是它的名称叫Google Play吧。
不管怎样,现在如果你(尤其是年轻一代人)还在用老式的那种只能打电话的手机,那简直是不可想象的。历史的年轮就是这样,要么你自己跟着走,要么你被推着走。我们必须要感谢当年苹果公司划时代地推出了iPhone这个产品,开创了智能手机的崭新时代。而如果你用了智能手机,却不知道怎么下载或者使用各种 App(至少一两个屏幕),那简直都不好意思跟人打招呼。可以说,正是因为开放共享的App这种模式,彻底地激活了智能手机这个市场,也改变了我们使用手机的习惯,现在手机作为打电话的工具这样的角色实际上已经大大弱化了,难道不是吗?
Native Apps风靡一时,并且在可预见的未来将仍然受到广大智能设备用户的喜爱。还记得有一段时间,全民都在玩愤怒的小鸟,后来的微博,微信能热闹起来也很大程度上是因为人人都可以随时通过智能设备进行互动和联系。我觉得Native Apps具有如下的主要优势:
更好的用户体验。Native Apps可以使用到当前平台的所有功能(除非平台有所限制),尤其是对于触摸及手势的支持(以及触摸带来的反馈感),同时还可以很好地访问到智能设备那只的功能,例如拨打电话,发送短信等等之类的功能,支持音频,视频,地理位置等资源的访问。拥有这种能力,再加上足够专业的团队可以做出相当不错的Apps。
可以离线使用。这可能是更为重要的一个优势。当前我们还做不到网络无处不在(尤其是在二三线城市及乡村)。Native Apps,尤其是游戏类Apps,天生适合在离线状态下使用。这也是它们这么受欢迎的原因之一。另外有一些做得更加好的Apps,例如某些地图Apps,它们既提供了离线使用,也可以联机使用,这是相当不错的。
商业模型。这是App Store能够成功的原因之一,大量的开发者,不管你是个人单兵作战,还是公司团队作业,都可以将你的Apps毫无障碍地发布到全世界,供所有人使用。你可以收费,也可以不收费,收多少都由你决定。有不少报告说某些开发平台的开发者实际上收益甚少,其实这个跟大部分的市场都差不多,只有塔尖的一部分人才能最大受益,一将功成万骨枯。但无论如何,这个开创了一个新的商业模型,这是一个好事情。
反过来我们也可以探讨一些Native Apps的劣势:
开发成本相对较高:Native Apps是需要根据不同的智能设备平台专门进行开发的,例如iPhone的操作系统是iOS,那么要做iPhone的Native Apps,本质上是需要理解iOS,并且采用它所要求的语言和工具进行开发。其他的智能设备也各自有自己的操作系统。所以,如果一个公司想做能够用于各种智能设备的Native Apps,那么一般就得有几个不同的团队专门针对不同的智能设备进行开发,虽然本质上说,这种开发并不难。
部署问题:Native Apps通常都要求发布到平台所规定的App Store里面(除非你进行所谓的越狱,然后可以通过一些第三方工具安装Apps——我非常不推荐这种方式),这样做的好处是确保所有的Apps都经过审核,符合安全等方面的规范。对于那些本来就准备要向全世界用户公开使用的Apps来说,这没有什么问题。但是,假设我们要开发的是一个企业级别的应用,甚至就是给企业内部使用的,提交给苹果公司(或者其他公司)进行审核,看起来有点滑稽。我知道还有一些特殊的做法来绕过App Store,但其专业性和繁琐度实在是超过了一般用户可以接受的范围。
软硬件依赖性:Native Apps可以使用到当前平台,当前设备的所有开放出来的功能。这是一个双刃剑。在某些平台上面做开发的时候,得非常小心地匹配操作系统的版本,硬件的屏幕尺寸等问题,这在很多时候确实是不小的麻烦。
Web Apps
因为上面提到的一些原因,Web Apps的兴起是很自然的,尤其是我们有大量的应用本身就是B/S架构的背景下。这几年不少公司都在做网站移动化这个事情,其实就是Web Apps不断得到发展和认可的一个明证。例如下面这个截图是斯坦福大学的移动化Web Apps
Web Apps的优势主要有如下几点
使用标准的技术:要进行Web Apps的开发,所需要掌握的技术都是本来就是标准化的。例如核心的客户端技术有:HTML, CSS, Javascript等等(目前也有一些较为成熟的框架可以使用),服务端的开发也可以采用你所熟悉的任何一种即可。你不需要专门再去学习一个什么平台,或者某个语言。
跨平台和设备:Web Apps既然是遵从标准而开发的,所以天生就具有了跨平台和设备的能力。目前绝大多数的智能设备都积极地支持HTML 5和CSS 3这些新的标准,市场的充分竞争为打破平台和设备的壁垒提供了最根源的动力。
易于部署和更新:Web Apps不需要在本地安装,可以集中部署到某个服务器即可;同时,大部分的Web Apps都在本地不保存数据,所以后续更新起来相当容易。通俗地说,用户每次打开Web Apps就是打开最新版的应用。
那么,Web Apps有哪些劣势呢?
必须要联网才能用。绝大部分的Web Apps都是如此,除非特别设计了脱机网页支持和本地存储功能(这在HTML 5中是可以做到的)。当然,这个可能不一定是致命的问题,因为如果是企业级别应用,或者是云端应用的话,绝大部分用户是可以接受说“联网再使用”这种要求的。
浏览器兼容性问题。Web Apps是要在浏览器中打开的,我们很容易想到浏览器兼容性的问题。这个在以前我们做B/S架构应用的时候,就曾经是前端开发工程师的噩梦。不过,对于在移动设别上面,我倒是相对比较乐观。正如我前面所说的:“目前绝大多数的智能设备都积极地支持HTML 5和CSS 3这些新的标准,市场的充分竞争为打破平台和设备的壁垒提供了最根源的动力”。
功能受限。Web Apps因为毕竟只是一个网页,所以通常它不具备直接访问智能设备现有功能的能力,或者至少有较大的限制。
融合,而不是零和的竞争
我们上面讨论到了Native Apps和Web Apps各自的优缺点,正因为如此,所以我觉得在做选择的时候,应该扬长避短、因地制宜。我个人的经验是这样的:
Native Apps比较适合游戏,私人化的应用(社交,娱乐,小工具等)。去年有一个大事件,就是Facebook原先是采用Web Apps开发的(小马同学最初坚定地支持HTML5),后来放弃转到了Native Apps。我觉得这当然跟HTML5还没有成熟有关系,但究其根本原因,社交应用这种使用频繁度很高,黏度要求很高,本地体验要求丰富的场景,确实适合用Native Apps来实现。
Web Apps比较适合企业级别的应用,而且主要适合用来辅助原有B/S系统的功能。短期来说,因为网络依赖性,以及设备屏幕限制等因素,在功能上一定要做区分,并不是所有原来系统的功能都适合转换到移动平台上面来。
那么办公呢?让我来说的话,既不适合在Native Apps来实现,也不适合用Web Apps来实现。归根结底,这是因为智能设备(手机,平板)的屏幕尺寸,和操作习惯决定的。现在有一些新的设备,带有键盘,甚至屏幕也跟笔记本电脑相差无几,如果你一定要说他们可以适合办公的话,那我的看法是,当然,他们是可以办公的,但跟笔记本电脑你觉得差别在什么地方呢?对,带有触摸的笔记本电脑?
我这里有另外一个隐忧,某品牌的手机屏幕越做越大,似乎有一定要超出裤袋的尺寸,要求人们一定要挎一个包包才便于携带的可能。这真是一个好的方向么?
归根结底,我想说的是,Native Apps和Web Apps不是非此即彼的关系,就像手机,平板和PC可以和谐共存一样的道理。
有不少朋友抱怨Web Apps的一个原因是,用起来不方便,非得打开浏览器,输入地址,然后才能访问。当然,如果你真的每次都这么做,是肯定不方便的。事实上,iPhone就提供了将Web Apps钉在屏幕上的功能,例如你可以点击下图中的“添加到主屏幕”这个菜单
以后也可以治可以直接点击屏幕上面的按钮来启动Web Apps
另一种融合的做法是,将Web Apps打包成为Native Apps。这早已经不是一个梦想了,有兴趣的朋友可以参考PhoneGap等框架
我还知道一种更加简单粗暴的做法,就是做一个最简单的Native Apps,然后使用一个WebView的组件(大部分智能平台都有这个组件),直接加载后台的Web Apps。这种做法当然技术含量并不高,但存在及合理,至少跟买了Mac电脑后还是愿意在里面装Windows 操作系统一样合理。
统一的Native Apps开发平台?
是否有这样一个可能,我能用同一个语言开发应用在不同的智能平台的Native Apps呢?听起来有点拗口,但目前确实有这方面的探索。有兴趣的朋友可以了解Xamarin。(原先的Mono项目)
我在这方面没有过多实践经验,没有太多发言权,但总体感觉这是一个不错的尝试。
超级Apps?
最近有一段时间,似乎大家隐隐约约地讨论超级Apps的话题。所谓超级Apps,就是说一个通用的Apps,承担了其他很多Apps的入口功能。这是怎么可能实现的呢?其实,并不是说这个Apps有多超级,真相是,这些Apps拥有了超级大的用户流量,使得其他一些想做Apps的厂商放弃自己独立做的念想,转而利用现有这个App的基础功能,实现自定义的一些应用。我们目前能看到的一个较为可能成为超级Apps的应用是微信。它的做法是通过公众号,向合作方提供定制化服务的可能,合作方得到了用户流量的红利,同时更进一步促进了微信的发展。(我个人认为,这是近年来微信取得成功的一个原因吧)
其他领域是否有可能出现超级Apps呢?我觉得是可能的,让我们拭目以待吧