移动开发—HTML5 or Native? HTML5,“Write once, run anywhere”,态势足以秒杀一切。而今随着移动设备愈来愈先进,对HTML5的支持度愈来愈高,进军移动领域时会遇到是选择HTML5和仍是Native(用原生代码编写的当地程序)的疑惑。据笔者近年来对二者较为深刻的研究,认为二者之间不克不及仅仅是二分法来选择,还要根据企业自身的状况、团队的构成、公司的战略以及资源的特色等等各方面因素来综合选择。 HTML5的成长前景我无疑是非常看好的,各大公司也全力以赴的推进,目前主流的三大智能机操做系统iOS、Android和WIndows Phone都已经支持大部门的HTML5特性。而移动设备硬件军备竞赛也为HTML5扫清硬件障碍。依照如今的成长速度,我判断是在三年之内甚至更快,移动设备运行HTML5将会彻底没有压力,不管是尺度仍是硬件。如今主流的智能机已经配置双核处理器和1G及以上的内存,今年再出智能机没这个配置你都很差意思发布了。前端
谈谈HTML5程序员
1.HTML5可以让你解脱对平台的依赖,用户打开浏览器,直接就可以等候你的应用,而不须要通过各类Store的审核。浏览器
2.实时更新,一般平台的审核都须要七个工做日左右的时间,若是你发布以后发现问题怎么办?Web方式就不存在这种问题。安全
3.Write once, run anywhere?这是几多程序员的梦想,也曾经是Java让人心动的地方,但真正作过跨平台解决方案的人都知道,这只是一句口号而已,跨平台没那么容易玩转的。没错,HTML5能够实现Write once, run anywhere,但咱们总等不及写一个Hello World来run anywhere吧。不一样平台有本身的特性,不一样平台用户也有本身的操做习惯,若是你想讨好全部人,也就意味着你没法讨好任何人。服务器
4.减小开发工做量或者让开发变得更简单?对老板来讲,这是一个非常诱人话题,由于工做量的减小就意味着节省更多的钱,没有老板不喜欢用更少的钱办更多的事。并且目前一个很大的问题是,移动设备开发人员特别是iOS开发人员非常很差找,由于技术好的都本身作应用了,人家本身也能赚个月薪上万甚至更多,为什么要进你的公司?怎么说也是本身的事业,拥有无限可能,还能够充实享受自由。但若是能够充分利用HTML5,那么咱们就可以招聘Web前整个开发人员来构建移动应用,这样就不愁招人的有问题。由于在许多人的眼里,HTML5/CSS/Javascript都是没多大技术含量的工具,实在找不到人,找些实习生学学也就会了。但问题是,工做量真的会减小吗?技术门槛真的那么低么?谜底是NO!架构
我曾经花了半年的时间去开发一个基于HTML5的移动框架,用来模拟Native应用,让HTML5应用看起来尽可能像当地应用,注意:是像。这有点像jTouch,但愿它能和Native程序很好地交互,并且能挪用当地资源等等特性。但最后结果却不是那么使人满意,好比HTML5在动画切换的时候,有时候会有一些稀里糊涂的问题,当然你能够告诉我把动画效果关了,但这看起来很死板,最后我不得不关闭某些动画。而用Objective-c编写程序就没这么多事了,几句简单的代码能够实现很酷的动画,用HTML5须要更多的代码,甚至根本没法实现。并且移动设备上的HTML5开发对开发人员的技术有非常高的要求,不是通常的Web前端人员能解决的,一般拥有这样技术的人才,工资水平也不会比Native开发人员低几多。若是你仅仅是要开发一个移动设备上的网站,这会简单不少,但若是你但愿模拟Native应用,并且拥有较高的效率和优雅的用户体验,这就颇有技术含量了。不要小看Javascript这类Web开发语言,一般个人见解是越简单的语言越会体现出技术人员的水平,特别是规划设计能力。框架
5.其它问题,资源使用的限制,比如说在iOS中有Javascript运行不得超过15秒的限制,不得使用当地硬件设备(如相机等),没法使用推送服务等。工具
如何选择?动画
是否这样,咱们就不要选择HTML5了呢?我在前面说过:“要根据企业自身的状况、团队的构成、公司的战略以及资源的特色来综合选择”,我最近在关于HTML5讨论的微博上也有谈到:“HTML5是战略性的目标,Facebook和Google已经结构,Google Mobile在iPhone上的体验能够媲美Native。基本上Native+Web App能够秒杀大多应用,若是不肯意受制于各类Store,Web App是一个不错的选择。对游戏类和对硬件环境依赖严重的应用,只能是Native”。仅管有这样那样的问题,但HTML5是一种趋势,在将来三至五年,HTML5将会取代不少本地应用,但就像多年前咱们一直在谈B/S架构取代C/S架构同样,这须要一个过程。一般在HTML与Native之间,咱们有三种选择——HTML五、Native App以及HTML5+Native。网站
HTML5就是指纯Web的移动应用,用户须要打开浏览器,而后输入应用的网址使用。Native指的是基于特定平台开发的应用。Native+HTML5其实是一种加壳的方式,将HTML5应用和浏览器封装起来,但这对用户是看不见的,用户没有任何异物感,和Store上下载的App没有什么两样。就我我的而言,我是特别推崇HTML5+Native的,这种加壳的方式,可以让你享受Native与HTML5的双重好处,但缺点是对技术含量要求较高。当然我这里指的不是简单地把HTML5封装到一个浏览器里面,Native与HTML5会有许多的交互,实际上这有点像混合硬盘,咱们既但愿享受SSD的快速,但咱们又想得到机械硬盘的高性价比。我认为在5-10年内,这将是一种不错的解决方案,当HTML5和硬件成长到必定水平以后,咱们再彻底转向HTML5的成本也会非常低的。
如何作?
假定现有一个对本地环境依赖不那么严重的项目,如微博客户端,各类社交美食甚至LBS应用,咱们均可以采起HTML5+Native。如图所示,咱们能够将核心的代码Core层应用封装起来,这个代码和平台无关,主要是业务逻辑以及和Shell的交互,代码用Web语言编写。在Core层上咱们再根据不一样的移动平台制做不一样的UI。最后咱们将上述两层放到各平台的Shell中,这个Shell主要是由浏览器来完成工做,当然还包含一些硬件操做和读取本地资源,如GPS、重力感应、相机挪用、地图、推送通知或者IAP等。
咱们能够把Web的升级版本布置到服务器上,用户运行App后,App会向服务器请求获取最新的Web程序并下载运行,这样能够到达跳过各类Store的更新审核,达到快速更新的目的。并且假如用户没法访问互联网,咱们可以让用户使用上一个版本的程序,不会像纯Web App那样要求用户必定要联网。
好处
1.用户能够离线使用。
2.更新下载量极少,能够所有更新,也可以选择替换版本文件。
3.代码很安全,众所周知Web应用有一个很大的问题就是代码安全的问题,但如今咱们能够将Web代码所有加密,当地应用解密后再运行,大大的提供了代码的安全性。
4.能够经过浏览器做为中介充分利用Native的好处,比如说可以使用GPS、照相机、当地相册、读取当地联系人,也可以使用推送功能等,最重要的是,某些Web没法实现的功能,咱们能够利用Native来实现。
5.跨平台,大都核心代码不用重写,Javascript的代码用得好的话,在许多地方均可以用到,包含移动应用、移动网站、PC网站、各类浏览器插件,甚至能够用WebKit封装做为跨平台的应用程序。诚然,这种方式并非彻底跨平台,但这样也足以减小不少工做量了,特别是后期的维护。并且彻底的跨平台是没有意义的,不一样平台有本身的特点,为了更好的用户体验,界面层仍是须要针对性开发的。
坏处
我以为最大的坏处是技术难度高,若是仅仅是简单的浏览器封装几个HTML文件,那没什么技术难度,但若是要打造一个系统级的工具,这就颇有技术难度了。这要求有人要了解三个主流平台的浏览器特性,通晓Native程序的开发,要精通HTML5/CSS3/Javascript,最重要的是,要有较强的架构设计能力。若是要再找一个坏处的话,就是它不能知足全部的须要,它其实不能取代Native,但我认为他能够替代大部的Native。最后一个问题就是考虑是否适合咱们。从资源角度,要看你的资源是否严重依赖于本地环境,如图像处理、华丽游戏之类;从技术团队构成,在团队中有能够解决这些问题的牛人,并且有成员精通Web状况下能够考虑运用这种方式(技术选型至关重要,稍有失慎,祸不单行);从公司战略,包含公司对HTML5将来成长的见解,在移动互联网领域投入预算,是否愿意作前瞻的事,可否在前期投入较多资源以及是否容许试错等等。