移动开发这些年,移动开发者人数愈来愈多,相似的培训公司发展也很快,不过伴随着的是移动应用的需求这几年发展更为旺盛。要开发好的App,纯原生开发确定是最佳选择。可是这么多年发展,原生开发的难度并无下降多少,特别是做为一个须要长期运营的App,须要原生人员的长期跟进,人员成本很高。另外,从苹果和Android的崛起开始,为了支持大相径庭的二个操做系统,至关于二套开发人员开发二个功能彻底的App,可想开发效率的低下。html
一直以来,程序员对移动跨平台的追求就没有中止努力,跨平台是为了提升开发效率,随着带来的必然是性能的下降。但从软件发展的历史看,部分损失某一方面的性能来换取效率的提升仍是很是值得的。
就好像咱们用c语言替代汇编,损失了掉的那些运行效率基本是能够忽略不计的,咱们换来的是开发效率大幅提升,相对于汇编语言而言C语言同时也部分解决了跨平台跨设备的问题(至少不用再考虑对特定寄存器的编程了)。
一样当历史发展到大量用Java替代C语言开发的时候,咱们损失掉了c语言的Native设备的开发能力的同时,所换来的多线程开发、分布式开发、跨平台开发能力的加强,也彻底符合www时代发展的须要的。android
自然的,移动开发的程序员首先想到的H5和Webview,这是最容易实现的跨平台方案。在H5的路上移动开发者们作了不少努力。纯原生开发咱们暂时不提,光从跨平台来讲,发展的历程能够大概分3个阶段:ios
1. 纯H5方式程序员
因为web应用已经在PC应用上占了半壁江山,最先的时候你们想着直接使用手机的系统浏览器加载一个网址,这最容易实现,显然问题不少,性能就不提了,其它方面,好比不一样的浏览器适配很难,浏览器的安全性限制了大部分手机上的设备没法使用,存储本地都受限制。可是这种方式并无消亡,它有必定的适应范围。特别是随着微信的崛起,这种方式已经应用很广了,微信承载了一个统一跨平台的浏览器功能,并且能调用很多原生功能。不少想长期运营的App都会有微信的入口,并且一般是先作微信推广,再作App。web
以上的方式还有一个明显的缺陷就是应用的差别性,桌面上没有App的图标,你们都从浏览器或微信入口,对于一个长期运营的想有必定知名度的应用来讲确定没法接受。
接下来移动开发者的想法就是用一个有本身图标和入口的原生的App的壳加载一个原生的Webview组件,而后加载网页,同时经过js和原生的桥接技术来实现html和原生功能的调用。这种技术的表明是phonegap技术,它影响了国内不少移动开发者和公司,有很多框架和技术都是基于或学习它。在它被更名以前,咱们也完整下载和研究过它的代码。
这个时期的应用特色是:
* 整个核心就一个webview,里面页面的切换都是本地网页或web网页的跳转
* 没有任何原生ui的参与,全部ui都是靠webview的标签。有一些简单原生ui能够以窗口的方式调用起来。
* 整个应用的逻辑都是靠html里的js来驱动。
* 能调用原生的一些基础功能,好比摄像头,存储,数据库等等。数据库
这种方式起初仍是有必定市场的,主要是开发效率很是高,不少已有的PC端的网站改吧改吧就出来一个跨Andoid和iOS的应用。可是这样的应用只能说勉强能用,稍微复杂一点就连用都不能用了。性能和体验问题是最主要的,更况且早期Android 2.x时代,iOS4.x,5.x时代手机的性能也不高。编程
2.H5和Native的混合 (Hybrid)
手机的性能愈来愈好,H5也愈来愈流畅,可是随之而来的是好的原生App愈来愈多,H5在不少方面仍是没法替代原生。因而愈来愈多的原生功能和H5混合在一块儿,造成了Hybrid开发的模式。
这里我要说跨平台的发展分了二种思路或二个方向:
* 原生为主,更多的加入H5的元素,咱们暂且称之为Native/H5
* H5为主,更多的加入Native的元素, 咱们暂且称之为H5/Nativewindows
首先咱们看Native/H5,这种应用不少,并且是现有市场上的主流,特别是大型的优秀的之内容为主的App,表明是微信,天猫,京东这些App。里面都大量使用Webview加载大量网页。由于原生的更新很麻烦,而那些须要大量内容更新的App必然会选择Webview做为内容承载。很显然,这种方式并无下降多少成本,原生人员仍是须要二套,内容页面还须要一套熟悉web技术等人员。浏览器
咱们再看H5/Native,国内的表明应该是Appcan,APICloud,wex5等移动开发平台。这些框架的最先期就是我上面提到的纯H5方式,慢慢加上更多的原生因素,好比一个webview改为多个webview,页面上加入很多原生的ui元素,好比页面的titlebar使用原生的ui,还有不少,他们一直在努力解决体验和性能的问题。也有不少App产出了。国外也有不少框架,很多是经过html实现一套和原生样子很像的ui组件。可是相比Native/H5, 我以为H5/Native的发展思路不对。
咱们来看看它们的区别,咱们先来看二个App的截图:安全
我使用了Android的开发者模式,能够看到原生UI组件的边框。咱们能够看到他们的差异
* 天猫App的主要/主体页面是纯原生的页面,页面上全部大大小小的元素都是原生的UI组件。而下面的截图主体部分都是Webview组件,可是加入一些原生UI。
Native/H5的App全部核心的主要的界面都是纯原生,就像一棵树同样,一般只有到末端的内容页面是网页。页面的跳转都是原生效果。H5/Native主要的框架界面也是Webview加载Html,很显然,体验上和性能上来讲H5/Native要差不少。
* Native/H5的主要逻辑都是靠原生来驱动。H5只是负责简单的页面展现和不多的逻辑处理。H5/Native全部的逻辑处理都是靠Webview里的html里的js来处理。这一块,性能相比又差了不少。另外复杂度上高了不少,webview只是原生众多组件中的一个,由它来支撑和控制整个App基本上很难,不少开发中的坑没法解决。
* 从成本上来讲,Native/H5只是稍微下降了一点成本,由于仍是须要多套人马。H5/Native的成本就下降了不少了,由于只须要一套web开发人员。
3.JS/Lua和Native的混合
从上面咱们能够看到Native/H5 和H5/Native 中间咱们还须要再努力努力再寻求一个中间状态,就是尽量的不牺牲性能的基础上再下降效率和成本。这几年证实经过webview和H5的方式已经没法再优化了。
从Facebook的React Native开始,一种新的趋势已经逐渐冒出来,他们的思路是从Native/H5为源头,可是抛弃webview,保留js。Facebook本身至关于从新设计了一套相似H5的规范,并设计相似一个webview的组件来解析这套规范,包括ui和js代码。可是这里的标签对应的都是可扩展的纯原生的组件。
包括国内的阿里推出的weex和LuaViewSDK,思想上和React Native相似的。
他们的思路就是从原生开发人员的角度出发,尽可能扩大跨平台的范围,可是又不带来体验的降低。这种趋势应该是正确的发展方向。
不过这几个技术如今都是一个SDK,也就是并不能实现真正的跨平台,作不到一套开发人员,一套代码就能发布多个平台。就像React Native的口号是Learn Once,Write Anyway。
我要重点介绍一下国内一个移动开发平台Deviceone。Deviceone的发展走过我上面提过的全部阶段,它经历是差很少4年,在内部已经有5个大版本的迭代了。整体来讲,也是长期追求效率和性能的最优化的一个结果。
Deviceone的特色是:
deviceone有一个核心框架,能够理解为相似React Native同样的SDK,能够解析自定义的ui标签和js/lua 代码的功能。差异就是,deviceone定义的ui并非相似h5,而是把ui代码和js/lua代码彻底分开成不一样的文件。Ui文件经过IDE的拖拽功能来实现,而后经过属性设置的方式,固然也支持js/lua代码访问。咱们直观的看看IDE里可视化ui的图。
deviceone并不仅是一个能实现跨平台的原生SDK,在这个框架的基础上,deviceone对android,ios,windows的移动基础框架作了抽象,包括移动系统基础元素Activity,UIViewCotroller之类的,也标准化了事件机制,存储管理,绑定机制,同步异步等等基础结构。目标就是App开发者无需了解Android,iOS技术的细节,用一套代码实现真正的跨平台,write once,run anyway。
deviceone并无脱离原生开发,只不过把原生开发和App开发者分离了,原生开发者只负责开发和业务无关的组件,好比Button,VideoView之类的。而App开发者不须要理解操做系统的差别,只须要参考组件的一套JS/Lua的API,而后专心整理本身App的业务需求,就能搭建出跨平台的App。
deviceone最大的价值就是提供了一套组件重用的规范和标准,并且是跨平台的组件。咱们日常用原生开发不少都是最基础的代码重用,组件重用也仅限于单个平台。而deviceone的组件商店已经积累了快100个跨平台的原生组件了,是由deviceone官方和一些我的原生开发者开发的,有不少都开源了,你们能够参考。目前正在以收费组件的方式吸引更多原生开发者参与。
deviceone在现有的不少第三方组件基础上由实现了跨平台的封装。大量的第三方平台提供了优质的服务,一般原生开发人员只须要集成android和ios都sdk就可使用,大大简化了开发人员的。咱们在这个基础上又简化了一步,一套js的sdk就可使用。咱们已经集成了不少经常使用的好比百度地图,极光推送,几个经常使用的支付,分享等等。
deviceone提供了强大的可配置组件云打包系统,开发者能够在100个组件里勾选本身须要的组件,而后打包成调试App和发布App。另外提供了不少配置项,尽可能简化开发者的工做。
deviceone对外正式发布半年多,已经积累了不少企业应用,最近几个月逐渐开始积累很多我的应用,感兴趣的能够去苹果的商店和android的市场上搜索一下“慧影时间流”,“纳豆-点餐”,“爱抢劵”,“易经造命”体验一下。这一个月应该又有很多上线应用,请多关注。
介绍了很多,感兴趣能够去多关注国内这个优秀的产品,我相信很多移动开发者被国内各类框架的“折磨”失去了对国内移动开发平台的信心,可是这个平台值得你花一点时间去研究和体验。