微信小程序与React Native的异同之处

前言

什么是微信小程序
750680a01ab14a9b80cdaeff483c15fe

微信官方这么解释:

我们提供了一种新的开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。

从字面上理解,微信小程序和一般的App程序不一样,它不存在安装卸载的过程,一切操作都是在微信中进行,且可以做到快速开发、便捷使用。且由于是在微信内部进行使用,它无疑可以统一Android、IOS、WP三大平台,实现了一套程序,在多处运行,这就相当于微信成为了一个系统架构,避开了原始的微信搭载环境。

在未内测时,很多人都把小程序当做一个内嵌web应用,而鉴于web应用体验感较差,很多业内人士都持有保留意见。但当如今内测已经进行了一段时间,通过官方公布的文档与相关语法结构不难看出,微信小程序的开发技术上是使用一种类似 React Native 的框架来保证程序的原生性和稳定性。

什么是React Native?
9fb7fa2ce235443191aa9f3b2295199e
Facebook 在 React.js Conf 2015 大会上推出了基于 JavaScript 的开源框架 React Native。
官方文档这样解释:

React Native使你能够在Javascript和React的基础上获得完全一致的开发体验,构建世界一流的原生APP。

React Native着力于提高多平台开发的开发效率 —— 仅需学习一次,编写任何平台(Learn once, write anywhere)。

本文着重对比React Native与微信小程序的异同之处,并简要阐述相关架构及应用前景。

一、项目结构

微信已经提供了小程序开发工具,以下是开发工具demo工程的示意图:
aad910228a7d4c9b931a312d8353e88a

而其demo项目结构:
19a25dbe57264b8eba8f8d85749f65df
入口文件就是最外层的app.js,app.json,app.wxss。
app.js   提供入口文件以及一些初始化绑定。
app.json 提供项目的结构和项目配置
app.wxss 内部页面样式
page目录 存放需要实现具体功能的页面
util目录 存放需要用到的工具函数
image目录 存放需要的图片

app.json是小程序的配置文件,其中存在多个配置项:
8b154d3295164fffabc616055dd507b9
下图是各配置的内容与描述。
01cf098551544413b2ea78b74bb4350c

这里需要提一下的是微信定义的新文件格式:其中wxml与HTML类似,wxss与CSS类似,而js文件以及文件夹则包含组件逻辑及资源文件。

我们可以对比下React Native工程的demo项目结构
b218263317c048d4b511431e4d00d7e4

每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。
e1466a856a404084b871cebb6b950b33
npm install会根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
.json配置文件是在js开发中比较常见的结构,这里也不做多的阐述。而js文件以及文件夹也包含组件逻辑及资源文件。

二、基础组件库

微信提供了一套基础组件库与API,分为八大类:

视图容器(View Container):
b269a74073a546388c16c0c012e52b0a
基础内容(Basic Content):
3e2cbc319e5b4468bc93c6fdb8456a0d
表单(Form):
546b56829a74444ba20363aa5d1725d9
操作反馈(Interaction):
e93eab1869614e3c9fec2e1201986c17
导航(Navigation):
4332ff8c0673437ca12e7208d3bebc49
多媒体(Media):
c75d9ad1b2f5420fa2d662970ddbef50
地图(Map):
2b2c96b4c8394cf88381c1beda9bdedc
画布(Canvas):
e8e14d8e3d484d34b3386294db659dcc

顾名思义,这些组件都存在相应的功能,且每个UI组件库都具备相应的功能组件。
对比下RN的组件库
02585e95385a4e3e9b918d7fcbdfba05

和RN不同的是,微信小程序应该只能基于微信提供的组件进行个性化封装,而RN可以基于系统组件进行个性化封装。 原因字是微信小程序更偏向于微信这个架构,以微信为系统所创建。
这里简要对比下两个组件库中的scroll-view组件。
微信小程序中使用竖向滚动时,需要给<scroll-view/>一个固定高度,通过 WXSS 设置 height。

示例代码:
7712a0be66294562989277f26644fe5a
之后只需在js中进行调用:
03c4a2bf63994688b388301fdfa091ab
而RN几近类似。下面的示例代码创建了一个垂直滚动的ScrollView,其中还混杂了图片和文字组件。
0c560100211141e6b18cdc9e5e5c5395

三、底层API

微信小程序提供丰富的微信原生API,可以方便的调起微信提供的能力,主要API分为以下几类:网络 API /媒体 API /数据 API/位置 API /设备 API /界面 API/开放接口。

从提供的API不难看出,API主要是微信能够提供的相应的一些接口,主要包括网络状态以及获取用户信息,本地存储,支付功能等。
而相比与功能比较单一的微信小程序,RN则提供了更多的接口与原生的系统Andorid/IOS进行了更多的交互与使用。
efb0fefb1edc45e494d8c00d95b80a5a

这里就不在过多阐述各个API的相关细节,只从大体框架进行考虑。微信小程序采用的基于微信的原生开发,包括小工具的开发工具都很轻量。而当开发完成后,微信会采用在云端OS编译打包的方式,将编译后的小程序发送到微信上,之后微信内置的解析器会解析这个小程序并进行展现。
2972e679ba4645d6b85992c95718f690

而RN轮子则比微信小程序更加的注重结合,它的原理较为复杂,不仅存在Bridge为核心的与原生系统交互的桥梁,在整个界面展示和程序使用方面显得更加严谨和完善。但不可否认,微信小程序的优势就是在轻量便捷上。

四、应用范围

不可否认,鉴于微信小程序的便捷以及轻量的优点,是比较适合服务性程序的,也就是常说的“用完即走”。适用范围可以参考以下几点:
1. 流程简单、界面简洁
2. 较为低频
3. 无需停留、用户可以暂时放弃

比较典型的譬如家政、在线教育、求职招聘、二手买卖、旅游、票务等特定场景。
dc4461b13c224223b90df6f94fbc15c1
而React Native则更为广泛,小到简单的获取天气程序大到游戏及多页面的电商产品都可以使用。其优点在于,React Native它具有跨平台特性,不需要开发者深入了解各平台Android/IOS的具体框架,就能开发一款高效App。同时,由于也是使用JavaScript语言,入门门槛相对较低,且React Native不仅支持与各平台进行交互使用,还能很好的移植到原生项目,这就让RN使用范围更为广泛。

五、前景与展望

如今React Native也已经推出了一年多,版本也推出到0.34,其支持的框架也从IOS衍生到了Android,Facebook 也在大力推广该架构,其前景自然一片大好。

但刚刚推出的微信小程序在国内还是有一定的优势。首先微信有庞大的基础用户,小程序又无需下载安装和更新很类似于微信公众号,不想使用可以取消关注,且创建与开发简单方便,可以很好的进行传播和吸引用户。

但这微信小程序存在巨大劣势:
1. 平台封闭性过高,大量原生系统服务无法使用。
2. 不兼容某些WEB标准协议,不能跨浏览器使用。
3. 不支持nmp,npm架构正是React Native所使用的。
4. 组件单一,很多场景虽然可以使用,但功能仍旧单一。
5. IOS是否会同意微信内嵌其他的应用程序?这值得商榷。

不过可以想象,在不久的的将来,将会涌现一大批“微信小程序”,这种新的框架是否能够满足需求将会经过时间的检验。

原文:http://crash.163.com/#news/!newsId=38


关注我

我的微信公众号:前端开发博客,在后台回复以下关键字可以获取资源。

  • 回复「小抄」,领取Vue、JavaScript 和 WebComponent 小抄 PDF
  • 回复「Vue脑图」获取 Vue 相关脑图
  • 回复「思维图」获取 JavaScript 相关思维图
  • 回复「简历」获取简历制作建议
  • 回复「简历模板」获取精选的简历模板
  • 回复「加群」进入500人前端精英群
  • 回复「电子书」下载我整理的大量前端资源,含面试、Vue实战项目、CSS和JavaScript电子书等。
  • 回复「知识点」下载高清JavaScript知识点图谱

每日分享有用的前端开发知识,加我微信:caibaojian89 交流