移动开发很火,移动开发技术很多。都有哪些技术?相互对比如何?怎样选择?

简单列了个表。

其中Native指原生语言,如安卓的java语言,苹果的objective-c或swift;Hybrid指混合开发,在前种语言基础上,借助WebView控件,将其中部分功能用前端技术实现;Html5指PhoneGap和HBuilder这种,最终会生成app安装包,但完全用前端技术开发,不需要懂原生语言;Web指为移动浏览器开发的网页,在手机上看外观良好,很可能要使用专门的样式框架如jquery mobile,或者bootstrap这种响应式框架;js-sdk指微信推出的技术,可以为在微信浏览器里展示的网页添加额外的功能。

技术选型,一看既有人力情况,二看需求。

既有人力情况:如果目前的程序员擅长后端语言(比如要做安卓应用,你恰好是java程序员),就该采用原生技术;如果程序员擅长前端,则该采用前端技术;如果程序员后端前端都有能力,混合开发也是可以的选择。

在需求上:如果要做在商城中上架的App,移动版网页和微信应用就不可能选择了;如果不希望每次改版都要求用户重新安装应用,纯原生应用就不要列为选项;如果时间紧迫人力有限,希望开发一套代码在所有平台都使用,则或者完全放弃原生技术,或者采用混合方案(嵌入WebView里的网页是同一份,只需要为两种平台各做一个壳子);如果看中应用的性能,采用原生技术能达到的性能上限当然高于非原生技术,但要结合程序员水平思考能不能达到上限;如果需要使用相机音频这些功能,纯在浏览器打开的移动版网页就不能胜任了,原生和混合当然能满足这个要求,Html5应用和微信应用则提供了数量有限但是跨平台了的接口,根据到底需要调用哪些本地功能来考虑;如果不同应用间需要交互,网页当然就是为这个而生的,微信应用本质也是网页也没问题,原生应用理论上在本机内部也能互通,但还是在互联网上来互通更合适,因为网页的跳转比下载安装程序方便太多了。

打开网页忌讳流量太大,等待时间太长,注意别用太大的库,而且做好缓存,如果是混合开发或者Html5应用,把资源打到安装包里会不错,这样往来的流量就只有数据了,如果是移动版网页或者微信应用,库的选择和缓存策略将是重中之重。

采用前端技术的优点是开发简单,表现力强大,而且跨平台,缺点一是用来解决性能敏感的需求不稳健,二是javascript作为弱类型的脚本语言,在工程上和团队协作上,相比强类型语言更容易失控,这就考验团队的经验和素质,如果功能实在简单,迭代周期不长,这倒算不上什么缺点,毕竟在没有ie6的世界里javascript用得认真点还是比较靠谱的。

由于html5支持本地存储和websocket,即使是移动版网页也有一定的c/s能力了。但如果使用原生技术,c/s编程元素的承载者应该是原生语言,即使同时使用前端技术,前端技术也该纯粹地用来表现和交互,这时候不该贪图前端技术的程序能力,就像java编程时不该贪图jsp拥有的写程序代码的能力一样。如果纯使用前端技术,那javascript就是程序实现的主力了,这时候就是前端转全栈的程序员最喜闻乐见的情景:后端的nodejs只提供rest接口,前面工程化的前端代码大发神威,这时AMD/CMD的模块组织就很关键了。这时库的选择就很重要,一是要足够强大,二是要体积够小,三是要模块化,最理想的还是前端程序员量体裁衣亲手写一套专门为这个项目定制的,如果觉得划不来那就用点心找第三方库吧。

原生开发中的库选择也很重要,好在无论Android还是iOS基础库都很强大好用了,本机自带基础库就是好,让应用既强大又小巧,windows上的.net运行式也算是半套基础库了,微信也算半个,既然事实上每台手机上都有安装微信,跟本机自带的也没什么区别了,所以微信本身它就是一个壳子,比起在手机浏览器里的移动版网页,微信应用先天多个壳子,比起HBuilder这种Html5解决方案,微信应用先天减少了下载壳子需要的流量。用c#写个桌面程序,可以逼迫用户下载.net运行时,你用python写一个桌面程序,则只好打成一个硕大的包来发布,HBuilder就像是Python,而微信就像是.net。

说来说去,还是没有银弹,移动开发技术之所以百花绚烂,就是因为每种技术都有明显的长处和短板,谁都无法取代谁,作为程序员,还是该多学点,这样可以采用最贴切需求的技术,但作为选型者,则不能逼迫小伙伴们全成为全能战士,根据团队情况和需求来综合考量吧,决策不就是个权衡和舍弃的过程吗,重要的,一是知己,二是知彼,这样,大概不会太糟。