文章目录
  1. 1. 天猫技术团队使用 React Native 代替 H5 实现产品化落地

天猫技术团队使用 React Native 代替 H5 实现产品化落地

自Facebook 开源出React 后,天猫技术团队就在一直关注,并对比现有Html5系的Hybird解决方案的差异性。

**React-Native 是Android端实现实现动态部署的另一种思路,绕过dexLoad【一些现有的Android插件框架】,同时实现了前端人员和客户端人员资源的共享,总之是非常值得期待和尝试

**地址:http://facebook.github.io

产品应用:

**业务上,天猫早是在15年的年中618大促及各会场业务页面中,率先在iOS平台上进行业务线上尝试,效果不错,得到肯定。

开源:

**今年9月15日发布了React Native For Android ,虽然相对于React Native For iOS来说,Android版本时间不长,但还是吸引了各路好汉的注意力,项目本身开源,且相关依赖的都是成熟知名的项目,github上非常活跃。

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

性能:

**现对于现有的H5+H5Cache的Webview容器技术,用 React 抽象操作系统原生的 UI 组件,代替 DOM 元素来渲染等。通过消息循环队列,计算虚拟Dom的更新差量,渲染View的Diff,减少过渡渲染,同时由于本身的Native UI Component,所以会使UI层面相对于H5 有更好的视觉和交互的体验。

同时在网络请求调用方面,可以不再受制于Webkit等内核的线程限制,使得React Native 在通信性能上都有了很大的提升。

目前现状

**ReactNative iOS方面目前已经相对成熟了,具备业务落地使用的能力。今天主要介绍下刚发布不到一个月的Android方面的情况

https://github.com/facebook/react-native/tree/master/ReactAndroid 【截止2015年10月15日】:

库版本号:

**目前release版本到了0.12.+,0.13-stable分支也已经拉了出来。

开发设备:

**简易使用最新的android sdk 环境配置,尽量保证5.0以上,并正确配置环境变量,ANDROID_HOME NDK_HOME,并确保如下4项:

Android SDK version 23 (compileSdkVersion in build.gradle)

SDK build tools version 23.0.1 (buildToolsVersion in build.gradle)

Android Support Repository >= 17 (for Android Support Library)

Android NDK (download extraction instructions here)

环境安��

**1.安装nvm

  • 1.brew install nvm

2.nvm 安装最新的 Node.js 4.0

  • nvm install node nvm alias default node

3.安装watchman 和 flow

  • $ brew install watchman

  • $ brew install flow

并更新brew

  • brew update brew upgrade

demo运行

**首先切换到你想要的目录下[尽量是空的干净的目录],依次执行以下命令

  • $ npm install -g react-native-cli

  • $ react-native init YourProjectName

  • $ cd AwesomeProject/

运行项目

  • $ react-native run-android

上面的截图是运行成功的结果,通过物理menu可以进行刷新。

如果出现下面的情况,是需要通过menu-dev setting-set ip的方式进行设置,没有找到对应的Node Packager Server。

快速入门:

**1、用编辑器打开对应的.js文件,分析代码结构:

var React = require(‘react-native’);

和Node.js有关,require可以引入其他模块。

类似java 的 import com.andorid.xx.Act;

2、React.createClass里的render方法就是渲染视图用的。return返回的是视图的模板代码。

3、样式表现:那么StyleSheet.create就是干这件事的,只是用JS的自面量表达了css样式。

4、引入css样式:

方法1:style={styles.container}

方法2:style=

5、注册View组件,第二个参数为React.createClass创建的 那个var对象

AppRegistry.registerComponent(‘aswsome’, () => yourVar);

6、通过menu可以进行debug,在指定ip的pc的chrome中输入http://localhost:8081/debugger-ui ,可以看到js端的console logs.

依赖树关系

**【如果不进行任何裁剪,依赖包+so有8M左右,略大,有待优化】

android-jsc-r174650

appcompat-v7-23.0.0

bolts-android-1.1.4

drawee-0.6.1

fbcore-0.6.1

fresco-0.6.1

imagepipeline-0.6.1

imagepipeline-okhttp-0.6.1

jackson-core-2.2.3

jsr305-3.0.0

library-2.4.0

okhttp-2.4.0

okhttp-ws-2.4.0

okio-1.5.0

react-native-0.11.0

support-annotations-23.0.0

support-v4-23.0.0

如何封装一个React Native Android的自定义组件

**1.首先需要使用自己的packageManager

2.在你的Activitiy或Fragment中对其进行设置

问题和采坑:

**性能:

部分UI组件在大量的图片流情况下,需要性能优化,比如现在的两个平台上的Listview实现都是直接配合着cssLayout进行绘制,没有能够利用上

包大小:

目前依赖包体积偏大。目前ios的jsc可以通过系统的Lib进行加载,而Android端更夸张,使用默认的依赖组件,直接依赖打包后将近8M

Android端进展稍慢:

JS-bundle的remoteURL和 本地FilePatch模式目前还都不支持,紧通过DevHelperHost+AssertsBundle,暂时还不适合在业务中落地

  1. and more ….

查看原文****************************

文章目录
  1. 1. 天猫技术团队使用 React Native 代替 H5 实现产品化落地