REACT NATIVE程序员互联网科技

ReactNative实战

2017-12-11  本文已影响136人  烫爷

一、引言

之前的文章客户端Hybrid架构设计之——WebView方案的实现,已经介绍了如何用WebView来实现Hybrid架构。当时提到了这种方案的几个缺陷:

  • H5页面的部分用户体验不如native
  • H5也需适配各平台机型
  • 原生端基础框架搭建费时费力,有时一些特殊功能需要ios、Android、H5三方联合开发,增加了沟通协调成本

所以在这套架构基本开发完善之后,项目组马不停蹄的开始研究相对更先进、更优的解决方案——ReactNative/Weex。他们相比WebView方案的区别就在于,js代码最终会被翻译成原生代码,呈现在用户面前的也是原生组件,所以性能、体验也是无限趋近于原生级(之所以只能是趋近,因为还是有js和原生通信所产生的性能损耗)。

经过近半年的调研、学习、实战,项目最新版本的主要页面已经全部由ReactNative来实现,既然有了些成果,这次就来跟大家做个简单的分享。本文为了方便,主要还是从Android的角度出发,iOS的思路也是一样的。

二、选择RN还是Weex

结果很明显,我们选择了RN,但不得不说,从一开始,烫爷一直是更倾向于Weex的,因为当时觉得Weex相比RN有以下几点优势:

简单说,Weex更新更性感更中国。那么大家要问了,Weex那么棒,最后怎么还是选了RN?理由也不复杂:

技术选型,可能还是要稳妥一点,不能一味追求新潮,毕竟支撑业务才是第一位的。

三、ReactNative实现核心模块简介

RN方案其实和WebView方案非常相似,实现起来也并没有更麻烦,主要还是以下几个模块

同时还有一些需要额外学习的前端知识

四、原生改造

ReactInstanceManager reactInstanceManager =
 ((ReactApplication) getApplication()).getReactNativeHost().getReactInstanceManager();

if (!reactInstanceManager.hasStartedCreatingInitialContext()) { // 这句必须加,不然容易重复create,造成RN抛出异常
    reactInstanceManager.createReactContextInBackground();
}

五、更新模块

首先,当然可以使用Microsoft/code-push这类第三方更新组件,但是为了更好的把控这一核心功能,包括未来对多Bundle的处理优化等,有余力的同学,最好还是自己实现更新模块。

1、差分更新技术

更新模块中的一个核心技术点就是差分更新技术,差分更新技术主要依赖文件的开源二进制比较工具bsdiff。我们用apk更新的例子来简单介绍下差分更新技术:

自从 Android 4.1 开始,Google Play 引入了应用程序的增量更新功能,App使用该升级方式,可节省约2/3的流量。现在国内主流的应用市场也都支持应用的增量更新了。

增量更新的原理,就是将手机上已安装apk与服务器端最新apk进行二进制对比,得到差分包,用户更新程序时,只需要下载差分包,并在本地使用差分包与已安装apk,合成新版apk。

例如,当前手机中已安装微博V1,大小为12.8MB,现在微博发布了最新版V2,大小为15.4MB,我们对两个版本的apk文件差分比对之后,发现差异只有3M,那么用户就只需要要下载一个3M的差分包,使用旧版apk与这个差分包,合成得到一个新版本apk,提醒用户安装即可,不需要整包下载15.4M的微博V2版apk。

以上内容摘自 cundong/SmartAppUpdates

如上所述,差分更新技术可以有效减小更新包的大小,让更新更有效率。

2、具体流程

六、统计模块

高级程序员应该树立一个意识,开发并不只是开发完功能就结束了,事实上功能开发可能只占了整体工作量的一半,设计、测试、统计、监控等则占了另外一半。你开发的系统不应该仅仅满足于跑起来,还应该有一套成熟的统计系统去分析系统运转状态,有一套监控系统在出现故障时能自动采取措施或至少发出预警。由于RN是一个新框架,无论是框架本身,还是我们的应用技巧都还不够成熟,所以非常有必要去对RN的性能、错误等进行统计,并以此作为未来优化的根据。

七、其他

其实关于ReactNative的内容还有很多,这篇文章就先总结到这里,相信把上面提到的那些做好,再结合下官网文档,已经足够做出一个靠谱的商业级app了。等未来烫爷研究的再深入些,再找些别的干货来给大家作汇报,我们到时再会!

上一篇下一篇

猜你喜欢

热点阅读