最近很多读者问我这么一个问题,说刚做 Android 开发不久,但是市面上被 H5,React Native 等这些移动趋势冲击的不得不考虑要不要转头学习 H5 或者 RN ,担心跟不上时代,少年,你多虑了,今天我就写篇文章给大家详细解惑下,并且说下我的看法。

 

 

Native App

 

Native App 也即原生应用,如果你是做 Android 开发,那么大部分都是用 Java 语言来编写的,如果你是做 iOS 开发,则是使用 Objecttive C 或者 Swift 来进行编写的,这些都是官方的标准,好处显而易见,利用官方提供的 api ,开发的 app 有更好的性能,可以实现各种酷炫的效果,有更好的兼容性,对用户来说体验更好。

 

但是有没有坏处呢?有,比如你要开发一个 app ,一定是要 Android 端开发一个,iOS 端开发一个,从开发成本来说有点大,效率也较低,而且我们知道一旦程序出现 bug ,我们一般就只有重新发布一个版本来进行更新,对于 Android 端还好,对于需要漫长审核的 iOS 来说简直是噩梦。所以为了解决这个问题,涌现了各种热修复框架,但是毕竟都不是官方的,而且难免会有学习门槛,最重要的是不可避免的是这类为修复 bug 而生的热修复框架本身也有 bug ,有一定风险。

 

 

H5 App

 

H5 全称是 HTML5 ,是 HTML 最新的标准,我们一开始经常看到的微信朋友圈广告,一些推广链接等大都是 H5 实现的,所以 H5 最近比较火,不过所谓 H5 实现一般都包含有 javascript ,这都是 web 前端工程师的基本技能,这也致使 web 前端工程师职位近期较火。

 

不过如果开发一个 H5 应用的话,那很简单,你只需要在外面包裹一个壳就好了。拿 Android 来说,最简单的直接包个 WebView 处理下就可以算是一个简单的 H5 应用了,其他的交给 web 前端工程师就好了。

 

H5 应用的好处也是显而易见,跨平台,因为只需要在 Android 和 iOS 直接写个壳就好了,大大减小了开发成本,而且 web 是实时渲染的,即使有 bug ,可以直接发布就好了,也解决了热修复的问题。

 

但是缺点很大:首先就是性能体验太差,跟原生 App 的体验简直不能比,iOS 相对好些,Android 上的体验简直令人发指,而且 Android 本身版本的碎片化严重,再加上国内各大手机厂商所谓的「定制」,体验根本不能看,而且会遇到各种兼容性问题,远的不说,我在开发 Android 的过程中,就遇到不少适配的坑,有些你甚至都没法解决,只能眼看着。

 

 

React Native

 

原生 App 体验最好,但是不能跨平台,H5 应用可以跨平台,但是体验太差。有没有一种介于两者之间的解决方案呢? React Native 横空出世。

 

React Native 是 Facebook 工程师开源的一个框架,项目开源地址在这里:

 

https://github.com/facebook/react-native

 

它的设计基于 React.js ,通过编写 javascript 代码,中间做了一层解释器,把相关的 js 解释成原生组件,最终达到跟原生 App 差不多的体验。注意,React Native 最终运行的不是 web ,这点我们团队的小伙伴一开始也搞错了,它最终运行在机器上的是原生的组件。

 

这解决方案是不是很完美?利用 js 的跨平台特性,可以达到原生的性能与体验,听起来就帅爆了,加上又是 FB 巨头提出来的方案,所以该项目一经开源,在移动圈就引起了热烈反响。

 

但是如今一两年的时间过去了,看看市面上有多少 App 是完全使用 React Native 来进行开发的,我想原因有下:

 

1. 虽说性能与体验比纯 web 好多了,但是不管是 js 的执行还是多一层 js 到原生组件的解析渲染,性能上肯定是不如原生。

 

2. React Native 是一种解决方案,但是该方案还不成熟,据我所知还有不少坑,去该 GitHub 项目主页看下有多少 issue 就知道了,而且国内环境更复杂,你们懂得。

 

3. React Native 有不少限制,虽说它是一层 js 到原生组件的映射,但是并不是所有的组件的 api 都支持的,如果你亲身实践,你会发现,很多产品经理的需求很难实现,这次真不是产品经理的需求太复杂,而是 RN 的限制确实不少。

 

所以,RN 是一种解决方案,是一种技术趋势,但是完全不成熟,不建议在商业项目采用,但我们可以关注下,可以在业余时间学习实践下。

 

顺便多说句,阿里不是前段时间也开源了一个框架叫 Weex 么,可以说重新发明了类似 RN 的轮子,只不过它是基于 vue.js ,前几天宣布 vue.js 的作者以技术顾问的形式加入该项目组,但是我依然不看好该项目,一方面该项目会遇到 RN 上面的一些问题,另一方面阿里的项目大多是为自己的业务服务的,所以 Weex 应该有不少是跟自己的业务绑定紧密的,不一定适合大部分中小公司,我没有亲自学习与实践过,以上只是我个人的一些看法。

 

 

总结

 

所以综上,我觉得我们时刻保持对技术的敏感性挺好的,但是不要过于杞人忧天,而且国内很多媒体言过其实,稍有点风吹草动,就会被吹的上天了,所以我们要有自己的判断与实践。

 

我一直认为原生开发才是王道,无论到什么时候,除非你不做 App 开发,或者说以后 App 死了,微信崛起了,不过起码目前还看不到苗头,也别相信什么 App 已死的鬼话。那么什么时候 App 开始没落呢?我也不知道,给大家一个我自己认为的指标做参考吧,什么时候 QQ、微信、支付宝等推出新的使用方式的时候,可能代表 App 没落了,仔细想想,我们从 PC 时代过渡到手机 App 时代,是不是基本上从手Q、支付宝推出移动应用开始的,只不过 App 时代造就了微信,我们多关注微信的动向,因为这些巨头的敏感性总归要比个人要强吧。

 

对了,前段时间微信朋友圈推出了原生广告,微信第一次把广告体验提升到了一个新高度,我想某种意义上是不是说明了什么?

 

所以,建议大家不用再过度担忧了,可以时刻保持着对新技术的敏感性,但是不用过度解读,只要你目前还在做移动应用开发,你的原生开发能力还有很多潜力提升,现阶段你依然需要提升你原生开发的能力,把重心放在原生开发上!