最近总能看到相似“App已死,服务永生”、“App必死,web永生” 、“App已死,微信建站已生”这样的文章。不晓得这些网络写手究竟是想表明某些公司的立场、仍是想要表达怎么样的一个情结,文章中语气都是如此之确定,好像你们真的有什么仇什么怨同样。html
回顾软件发展的历史,C++开始流行时,就有人因其优秀的面向对象能力而预言C语言已死;Java语言开始流行时,也有人因其出色的跨平台能力和完备的内存管理机制而预言C++已死;在web盛行的年代,更是而有人因看好这种轻量级的B/S交互模式而预言原生应用已死。可实际上呢:这么多年过去了,根据TIOBE发布的编程语言排名结果(2015年2月版本),c和c++这两类古老语言都位于前3;原生应用也在智能手机时代从新回归主流地位。科技的发展就好像大天然的进化同样,是一个极其复杂的过程。咱们非要试图从某一个简单侧面去解释或者预言这个过程演变,其结果每每都是比较片面的。从大型机时代的T/S架构,到PC机时代的C/S架构,互联网时代的B/S架构,以及移动互联和大数据时代提出的IaaS、PaaS、SaaS以及BaaS架构;全部的软件架构都是为特定的技术时代和应用环境而服务的。就好像“java好仍是.net好”这样的讨论,这些年来就历来没停过,都快让人听得耳朵起茧子了。可最终又如何,java和.net二者各自都发展的好好的,科技的发展会以某些人的主观倾向为转移吗? 技术自己就无所谓好坏,最多只能说哪项技术更适合你而已。因此咱们在讨论哪一项技术好哪一项技术很差这类命题的时候,应该首先明确一个大前提:咱们到底要作什么?前端
服务仍是App?html5
咱们所说的服务,一般状况下应该理解为移动互联时代里的BAAS模式的服务,也就是为移动互联网应用开发而提供的云服务。其主要内容包括:数据存储、数据推送、版本管理、数据统计等几大类服务。因而可知服务和App之间原本就是两个不一样层面的东西,根本就不该该相互比较,更不该该说谁能替代谁。个别人偷换概念,甚至在文章中用微信服务号当作服务来讲事,这种说法虽然有失水准,但倒是别有用心的,根本不值得咱们过多的讨论。java
Web仍是App?react
去年的10月份,W3C的HTML工做组正式发布了HTML5的正式推荐标准(W3C Recommendation)。这一消息让不少人为之满心鼓舞,还有些人所以而判定web的回归以及App的灭亡。但咱们当仔细浏览W3C官方规划的HTML5发展计划,可能会发现现实并无咱们想的那么乐观:c++
http://dev.w3.org/html5/decision-policy/html5-2014-plan.html程序员
W3C官方公告称:“模块化一直在标准制定过程当中扮演着重要角色。为了实现功能的独立、快速进化,工做组会使用所谓的‘扩展规范’(extension specifications)。有一些最终会做为独立文档公布,并成为HTML规范家族的一部分,其它则会整合到HTML5规范里,成为基础。”web
目前来看HTML5.1才会是真正的HTML5,HTML5只是个妥协方案。就好像微软的windows8到windows8.1的升级同样,windows8的按时推出彻底是一种市场策略,而windows8.1虽然只是一个小版本变化,却在系统体系结构层面作了巨大的调整。 HTML5.1预计2016年第四季度公布后,工做组会重复上述步骤再搞一个新的HTML5.2,继续完善、丰富功能。具体时间没说,但估计获得2018年了。而从HTML5每一个方案的公布到得到几大厂商浏览器的稳定支持,通常还要再等待至少1年多的时间。就算咱们等到了HTML5.1或HTML5.2的到来,它就必定可以全面的解决咱们移动端应用开发的问题吗?编程
HTML5标准在正式经过的前些年,早就已是实时上的标准了。不管Webkit内核、仍是Firefox内核、IE内核(9.0之后版本)都前后对其实现了全面的兼容。以PhoneGap产品为首基于HTML5技术的移动中间件早在2008年就出现了,事实上咱们本身的中间件产品在3.0以前也是以HTML5技术为核心的。但这几年发展过来,这一类中间件技术并无实现对原生App开发的大规模替代,反却是有些被开发者们愈来愈淡忘了。这也难怪,咱们真的很难从AppStore里能找到一款彻底基于HTML5技术开发且让人以为还算优秀的应用。虽然HTML5技术结合原生App开发的模式已经比较成熟,但若是想让HTML5技术彻底替代原生App开发,这么多年来,其可行性目前应该仍然停留在实践的路上…windows
HTML5的草案最先是在2007年就被W3C接纳了,同年9月IPhone1代手机才对外发布。确切的说HTML5的最初设计根本就没有考虑现有智能手机的体系结构,不是为智能手机时代而生。我认为将来主流移动应用开发技术的改进首先会体如今如下3个方面:即UI视图的标签化,逻辑语言的脚本化以及底层技术的开放能力。初一看,HTML/HTML5技术已经自然的知足了前两条,其实则否则。浏览器DOM的实现过程和原生UI的实现过程存在着本质上的差异,这就决定了从web页面到原生页面之间根本就没法作到平滑过渡。对于底层技术的开放能力,不该该仅仅停留在简单API扩展能力上,更应该支持UI标签的扩展。或许咱们能够憧憬和期待将来HTML6标准的到来,或许在移动端HTML标准根本就不是必须的,咱们彻底能够找到更好的替代方案。
Facebook在移动端的技术发展路线就是对以上技术发展趋势一个很好的验证。Facebook以前曾经推出了react框架,它采用的全新思路虽然基于浏览器DOM的前端UI框架,同时也彻底接管了UI开发中最为复杂的局部更新部分,擅长在在复杂场景下保证高性能。尽管react框架在web体系下已经很是优秀,然而web终究是web,不管怎么改进仍是达不到原生应用的效果,Facebook最终也所以放弃了HTML5方案,在移动端转入纯原生开发的模式。近期Facebook官方宣称他们将要推出react-native计划,React Native彻底不用DOM,开发者可使用<View>取代<div>,使用<Image>替代<img>等,能够扩展自定义标签并实现原生对接,能够经过JavaScript来写高质量的应用。在我看来,虽然react-native还还没有正式推出,但它的技术结构已是已知中间件产品中最早进、最能表明将来发展趋势的。它所推崇的UI视图的标签化,逻辑语言的脚本化以及底层技术的开放能力。
为何必定要把Web模式和原生App模式分开来对立呢?这二者原本就有着各自不一样的优点。Web已经成为App的一部分,和App组件融一块儿各自完成其擅长的工做。 因此,Web和App都是咱们须要的,要取长补短结合在一块儿作。
微信仍是App?
谈到微信应用,天然是发自心里的佩服。国产的App产品可以作到如此之优秀的程度,确实让人折服。微信应用发展到今天,仅注册用户就已经发展到了6亿多,其市场发展的定位也远不止其早期起家时的语音通信和即时通讯那么简单了。朋友圈的分享模块,让微信占领移动社交网络的高地;公众号及开放平台,让微信成为智能手机端的信息门户;扫一扫功能,让微信成为移动端访问网页或者下载应用的标准入口;如今又微信开放了设备接入能力,不只仅是在为O2O市场的发展作准备,更是已经开始染指我的健康设备的领域了。再加上微信钱包、微信支付、微信商城、微信游戏等重磅型的巨无霸功能,真是微信触手无处不及呀。细分析微信的这些功能,其实早已涉及到了雅虎、谷歌、Facebook、阿里巴巴和苹果等多家互联网大佬们的核心服务范围。前段时间微信又发布新功能,在广州、深圳、佛山展开试点,启动城市服务这个全新的领域。腾讯的总体布局之大,看来真是想让微信作移动互联网的“惟一应用入口”,其野心已经很明显了。
咱们大可没必要被微信的汹涌攻势所吓倒,冷静的思考,微信的快速膨胀快速扩展战略,其实自己也没那么可怕。每一个垂直细分的行业都有本身的价值衡量标准,短时间的流量如没有长期优质的服务为基础也是徒劳,只有坚持作品质作价值才是正道。就好像当年的QQ同样,即时通讯带来的大量流量,确实可以带动起巨大眼球经济,好比其带动了腾讯游戏的快速发展。可是腾讯也曾投巨资尝试过作搜索引擎、作新闻资讯、作网上购物,最终还不是也都败下阵来。
凡事物极必反,今天微信确实太强太大了,强大得让人担忧是否它是否早已经触及了“去中心化”的天然发展规律。人们真正离不开的是“点对点”的沟通(即时通信),而不是点对多的沟通(社交网络)。微信的最大弱点应该就在于人们对“私密小圈子”的渴望,这偏偏也是微信早期得到成功的缘由。目前为止微信的用户一直在增长,咱们每个人在微信上都能看到本身的七大姑八大姨、单位的同事、领导、各类类型的客户、还有一大批卖东西的人(说的好听一点叫搞微信营销的人)都在里面了,致使原有的私密空间变得愈来愈不私密,这样下去微信恐怕也将面对相似“大批用户逃离Facebook”同样的局面。国内也发生过相似的状况,当初你们一窝蜂的涌入开心网,以前没玩过这类东西嘛,热情事后又一窝蜂所有逃离出去!
放在微信里打开的即便是普通web页面,初一看也会让人以为闪闪发光。然而移动端终究和PC端不一样,长期来看各类细分功能的用户体验效果仍是相当重要的。微信也有其自身的技术短板,例如:微信的web扩展应用必须有网络的环境下才能打开;微信本身的“返回”键和web应用内的“返回”键还会互相干扰等。可是没办法,微信支持的扩展能力也只限Web。微信最新版本的安装包已经有55M多了,再无限制的增长功能只会让微信愈来愈冗肿而加速毁灭。若是你想期望着在微信中扩展实时导航、虚拟现实、文档类解析、面部识别、3D控制、离线地图等这些功能,对不起,这些功能在微信里都是作不到的。
今天的微信已经成为移动应用的发布的重要渠道之一,大有“苹果、安卓、微信一个都不能少”的势头。不管智慧城市应用仍是行业解决方案应用,咱们既要保持保持苹果、安卓、微信(将来还会包括windowsPhone)等几个平台的同步发展,又要控制风险,不要把资源所有投入到其中的某一个渠道中,特别是不能把宝全都轻易的压在微信平台上,要充分考虑将来的风险。就比如在“呼机、手机、商务通一个都不能少”那个狂热的年代,那些压巨资于呼机或商务通的代理商们,最后的结局也差很少都和呼机或商务通同样,所有消失了。
微信想要作移动终端惟一入口,着实仍是有很大困难的。微信只是一个普通应用而已,它再强大也必须运行在在苹果和安卓的系统上运行。特别是苹果公司,每一年都在不断调整对上线App的政策要求,而微信仍在不断开放和扩展开放第三方应用,谁敢保障苹果公司哪天不会和微信翻脸。在安卓系统体系内,阿里、百度、小米、魅族这些公司都基于安卓内核在作本身云操做系统,而且这些系统在国内的市场占有率至关之高。IT生态圈的平衡发展,上下游之间即相互依赖又相互制约,长期来看主导权不可能只由微信一家说的算。正如马化腾本身所说"战胜微信的确定不会是微信,而是另外更好玩的",科技的发展每时每刻都在不断向前推动,这也许并不是危言耸听。
因此,咱们要原生App也要微信,但不能只要微信。
原生开发之困惑
咱们说App死不了,并不表示说App的很好吗?其实开发App是一个极其痛苦的过程。总有人找出一些理由说App已死,甚至还有些人对原生App开发模式明确给以仇视的态度,这些也都有其现实缘由的,我彻底可以理解。智能手机的时代确实发展的太迅猛,过程当中除了对传统行业形成了强烈的冲击外,同时也形成了IT行业内部一些资源的明显失衡。客观的说,对于绝大多数的移动应用项目而言,原生开发过程绝对是一个昂贵的陷阱。目前原生开发者(特别是IOS的开发者)工资水平确实过高:刚毕业的学生,培训的2~3个月,就能要到10K的月薪。有个2~3年开发经历且有些经验的,就敢叫到20K的月薪。App应用需求爆发性增加致使了市场供求关系的现状,这让IOS原生开发人员愈来愈紧俏,竞争已经不只仅是非理性,甚至已经开始有些疯狂了。在拉勾网上,招聘3~5年以上原生开发的工程师,月薪可以给到50K的竟然也大有人在。最让人接受不了的是这么高的工资,竟然一直都是供不该求。这让市场上的大多数公司如何忍受,让那些经验丰富的老程序员们情何以堪呀?
这让我想起了2000年互联网刚兴起那个时候的情形,在网泡沫破灭以前,刚毕业普通作网页的学生就能拿到10K工资,和如今的情况何其类似。
每个原生应用开发的项目都是一个巨大的坑。要么等着竞争者经过移动互联技术把你战胜,要么跳进坑,本身招人来开发移动应用。特别是对于面向互联网的2C应用或者企业内BYOD的应用,更是须要至少招聘IOS、Android两个以上的原生开发团队,开发成本也随之加倍。最可怕的是,须要面对大量的黑屏、闪退、屏幕适配等底层技术陷阱。再加上技术人员流失更换频率较高,业务系统维护周期较长,操做系统平台升级后的兼容性问题(例如IOS7 UI布局结构的强制调整问题、IOS8的64位内核强制升级问题)。处处都是技术陷阱,这岂是每一个小项目的成本可以承受的呀。
因而乎,不少开发者就会很天然的想到了Web技术,想到了微信平台。对于一些用户范围小、要求性低的App多是无所谓的。但对一些重要的移动应用来讲,下降品质下降用户体验效果,每每会直接致使该应用的失败。
原生APP不必定非要由纯原生的开发人员才能完成。这些年咱们一直在探寻移动端跨平台的中间件技术,但愿可以以此来大幅度下降移动应用开发成本。
出路在哪里?
开发高品质的App本就不应是一件困难的事情,咱们一直都指望着可以经过移动中间件技术平台,让普通的菜鸟也能够轻松的站到巨人肩膀上。你的应用程序逻辑使用统一的脚本语言编写并运行,而你的应用程序用户界面则彻底是原生的,想想都会以为很酷!科技的发展须要更专业的分工与合做:有人作手机就会有人作CPU模块、作摄像头模块;一样有人作App应用,也就应该有人作底层的UI组件、作API组件。一个优秀的移动中间件产品就是应该能“让昂贵项的原生开发人员可以更专一于底层技术创新和组件封装,让应用开发人员能够更加专一于具体项目的业务需求,实现原生开发和应用开发的完美分离!”
目前已有的移动中间件开发技术主要包括:IOS、Android或WindowsPhone的纯原生开发;以Html5技术为核心的中间件开发(例如PhoneGap, HBuilder, AppCan, ApiCloud)、以OpenGL技术为核心的中间件开发(例如:CrossApp)、以代码转换和原生反射技术为核心的中间件开发(例如:Titanium,Xamarin,React Native),以及以虚拟UI、抽象SDK、动态组件为核心的中间件开发(例如DeviceOne)。
采用纯原生代码开发App,虽然在能力上是最强大最灵活的,但却每每都要面临如下这些问题:多个平台做战、开发工期长、开发成本高;原生代码太灵活技术陷阱太多,再加上开发人员水平良莠不齐,很难控制应用质量;项目中要考虑的设备机型太多,屏幕适配工做量巨大;App升级工做烦琐、哪怕是很小的缺陷修复都必须通过AppStore的审批,还可能常常被拒…
当咱们考虑跨平台需求时,很天然就能想到Html5技术。若是仅仅是作一个演示demo或体验要求不高的app还勉强,然而当咱们真的去尝试用Html5作真实App项目时,咱们才会发现它所欠缺可不只仅是运行效率的问题,在很各个方面与原生交互体验的差距实在是太大了。 到目前为之咱们都很难从苹果商店里找到一个Html5框架作的且体验还算不错的应用,咱们还在移动端项目中痛苦的尝试Html5技术的时候,怎能忽略这个事实呢?
以OpenGL技术为核心和以代码转换和原生反射技术为核心的中间件产品,实际上并不具有完整的跨平台能力。就像facebook官方说的那样,他们所要达到的目标只是”learn once, write anywhere”而已,还不是”write once, run anywhere”。用Javascript语法仅仅是简单的调用IOS现有类库,其开发难度是可想而知的。
虚拟UI、抽象SDK、动态组件为核心的中间件,是目前最新的中间技术。目前来看,这类产品在技术上优点仍是比较明显的。但因为此类产品推出时间过短,市场检验的时间还够,因此咱们还只能对此采起观望和尝试的态度,后续其可否真的成为第一个值得咱们依托的移动中间件平台,这还要拭目以待。
多样性的趋势是移动互联时代发展的特色,不管在智能设备端、物联网传感器端、仍是各类终端上的应用,都会变得丰富多彩。然而,发展多样性并不表示不能解决碎片化的问题,相信将来每一个人最经常使用的App应该也不会太多。包括听音乐、看视频、玩游戏这些娱乐类的应用,还有即时通讯应用、城市服务应用、办公管理应用、健康管理应用、我的信息管理类应用等。每一个垂直细分方向上的应用,最终可能只有1~2家可以存活。可否下降开发成本是事关发展事关生死的问题,但高品质应用对于优秀的移动应用产品来讲也是相当重要的。咱们期待着可以真正解决问题的移动中间件产品可以早一天到来。