介绍html
移动应用程序(App)和HTML5都是目前最火的技术,两者之间也有很多重叠之处。在移动设备浏览器里运行的html5的web页面,也能够从新打包成不一样平台上运行的app。目前不少浏览器都有很好的跨平台支持,(译注:firefox竟然能够在android中使用和windows下一样的浏览器内核),HTML5的web方案,对开发者来讲更为方便。完成一次,便可多平台使用。但这确实可行吗?仍然有许多必要缘由,使得开发者选择了app开发。很明显,不少人已经在这么作了。本文将详细分析两种方案的优劣。html5
功能丰富java
正方:App里能够开发出更丰富的功能android
咱们把移动功能分红两类。程序自己和程序与系统的结合。好比android里,加入widget图标或者通知提醒之类的。App对这二者都没问题。不用多说,这是确定的。ios
反方:APP是挺强,但Web也正在迎头跟进程序员
确实不少原生app实现的功能是HTML5可望不可即的。无论你的web作的再牛,若是停留在一个没有摄像头支持的沙盒中,不少场合仍是玩不转。幸运的是,如今没有这样的沙盒限制了。若是你须要你的web照相片,能够作一个负责照像的app,再把你的web打包进这个应用里面。开源的PhoneGap框架是这么干的。这样widget,手机提醒也都没问题了。web
但这种混合开发的问题在于,增长了复杂性,并且不象传统web那样能够直接在浏览器里运行。这个问题短期内恐怕没辙。好在如今网络标准在不断的高速扩充,先进的浏览器也在一直跟进。Android 3.1已经支持camera了。iOS浏览器也支持WebSocket和设备方向检测了。chrome
总得来讲,移动设备在发展,而web也一样在快速变化。桌面浏览器自己,有5家主要浏览器开发商在改进现有标准,丰富新的功能。因此原生App在快速前进,同时,web也在缩小差距。canvas
运行效率windows
正方:原生APP速度更快
原生APP没有瓶颈,并且能够直接调用GPU加速、使用多线程。
反方:现现在Web已经快多了,并且多数应用也用不着那么快。
这说法有点落伍了。Chrome发布之时带来的Javascript V8,给Web速度带来的飞跃。而如今,计算速度变得更快了:
图片处理引擎已经使用web加速。如今硬件加速也已经开始应用了。看看用上硬件加速的canvas(图表来源)
要开发3D游戏的就不用抬杠了,但对于平而来讲,新闻、邮件、时间管理、社交网络,这些用Web都够用了。试试Steve Souders的手机性能测试工具。 另外,愈来愈多的框架结合WebGL,能够发挥OpenGL的优点了。好比ImpactJS,帮助开发JS游戏。
开发感觉
正方:原生APP好写
原生APP使用强壮的程序语言(Java, Objective C, C++)。适合写复杂程序,通过历史验证,API丰富。在桌面环境能够方便的用模拟器测试。而Web程序的runtimes和乱七八糟的各路浏览器让人头大。
反方:通常都是Web更简单,特别是须要兼容不一样设备的时候。
Web最初的功能只限于文档展现,而不是程序应用,貌似最近俩星期才有了JS。但有了JS后,web的世界立刻就不同了。更况且web不仅是静止的,HTML5,CSS3,EcmaScript Harmony(谁知道这是什么?)都给开发者极大帮助。你是喜欢C++,java, JavaScript,那你的我的爱好,也是基于你已经攒下的代码。可是如今没人可否认JavaScript也和前者站在同一擂台上。
浏览器/runtime的互不兼容(碎片),反过来看作APP也是同样。用Java写了Android app,而后又要面对iOS的Objective C。若是能写一个程序,立刻能在Android和iOS上运行,多省事啊。这咱还没提WebOS, BlackBerry,Windows Mobile呢。固然,这是理论上的。要是想让程序在每一个平台都跑得很漂亮,得作很多调试和妥协。这对不少原生APP也是同样的。不一样OS版本,不一样的设备。。。
所谓的Web碎片化,一直都是如此。但好消息是如今已经有不少不错的解决办法。Modernizr库,用得好的话,能够帮你兼容一大批主流设备,无论是啥系统,哪一个牌子的。看看咱们2011年的Google IO演示。
用户体验
正方:原生APP更切合原有平台
操做感觉的定义之一,就是用户但愿在你的程序里,用与系统连贯统一的方式来操做。不一样的平台,都有一些约定俗成的习惯。好比长按按钮会有啥反应。你不能期望用一套统一的HTML5 App去知足全部用户。
此外,整个平台的操做感觉都由用平台自有的软件库协调。直接调用平台工具包就能直接免费得到完整支持。
反方:咱们Web有本身的传统,你要特想作原有平台那种感受的web,也同样能作出来
前面说了,Web开发的方式,是先作一个大致适合全部平台的版本,而后再针对不一样平台不断改进。当这些改进主要是针对功能时,你能够选择几个你最关心的平台作优化。相似于浏览器检测。技术论坛里的悲催技术员们,常常抱怨这事。太多不一样的浏览器版本了。不过若是你优先关注两三种主流平台,是值得为他们多花点时间作作优化。
web原本就有本身的操做感觉。咱们也能够说,不一样的默认浏览器以及运行环境造就了独特的"Web感觉"。从更广的角度看,这自己就是一种用户公认的方式。此外,还有不少成功的案例并不遵循移动设备的原生操做习惯,人家也成功了。想一想你最喜欢的手机游戏的界面?不少更传统的app也是同样,好比Twitter客户端。
传播途径
正方:原生应用更容易接触客户
象Google Play和Apple Store这样的app发布机制这几年势不可挡,推进了整个移动行业。每一个程序员都能在市场里发布本身的应用。用户都挤在市场里浏览,搜索,接受推荐。不只如此,只要你的程序够好,现有用户的打分会帮助你说服更多新的客户。
反方:其实web才容易接触到客户
经过web找到内容,这是通过论证的可靠途径。利用URL,每一项发布的内容都有一个独立的地址,包括在网站上发布的应用程序。搜索引擎帮助发现内容,其余网站提供连接,还有一些相似应用市场的分类网站。用户还能够邮件、短信、在社交网站分享你的连接。你的应用连接能够直接在不一样设备上直接打开。
web上尚未一个统一的评分系统,但这个状况也在发生改变。往下看。。。
收费
正方:App收费:应天意,顺民生
“六岁孩子午餐时作app,$3一个,卖出几百万”。最近常听看到这样的新闻。各类大小厂商也跟着蜂拥而至,等着圈钱。应用商点帮开发商直接收费。最简单的办法,一次性收费。也有在app里再另行收费或者作订阅收费的,这帮助开发商赢得长期稳定的回报。
此外,传统网站的广告、赞助,在app里也一样适用。
反方:网站赚钱,历来都不是问题。如今机会还愈来愈多
Web能成为如今社会的推进力,有能力用多种方式取得回报,这是基本条件。虽然使用付费并不广泛。但SaaS的模式已经至关普及了。成功案例包括Google Apps,37Signals的系列产品,各种邮件的收费版。另外,直接收费并非web应用的惟一模式。广告、会员连接,赞助,其余产品服务的交叉推广都是可选的模式。
看着能在应用市场里直接赚钱而眼红的Web开发商们,大家不能直接把你的URL发进市场,可是作一个浏览web的app的壳子来连到本身的web上怎么样?如今市场中若是不说数以千计,至少也有上百的app这么干了。有些包装的好的,你甚至察觉不到他是一个web程序。
之后应用市场会直接支持web程序吗?这个如今还很差说,但去年Google已经建了个Chrome web store。虽然还只能从桌面电脑放问,但这已经挑起了浏览器厂商的兴趣。如今还只是个初步概念,但看起来挺有前途。
结论
如今还看不出完胜的一方。有些应用适合作app,有一些适合用html5。目前的状况,原生APP确定是一个很重要的选择。上面提到的混合式开发,多是一个不错的妥协方案。能用web的时候用app调用web。web实现不了的功能用app开发。
若是你选择web方式,要在web标准和不断的改进上用心。web技术自己的优势就是能兼容大批不一样的操做系统和设备。消极的看,你也能够这是碎片,但web就是一切通吃。
英文原文:HTML5 VS NATIVE: THE MOBILE APP DEBATE
中文翻译:unicom-china