Weex&ReactNative对比

简介: >weex开源有一段时间了,其实去年刚听说weex这个项目的时候,我就对它很敢兴趣,很大程度上是因为我自己对vue的喜爱。我从13年左右开始接触vue,14年开始熟悉这个轻量的框架,并慢慢的推荐给了身边的朋友,当我得知手淘的weex是基于vue的时候,就有了想了解一下的冲动。在weex开源之前,我刚好有几个月的时间一直在致力于ReactNative的优化改造,加上自己之前使用ReactJS的一些经

weex开源有一段时间了,其实去年刚听说weex这个项目的时候,我就对它很敢兴趣,很大程度上是因为我自己对vue的喜爱。我从13年左右开始接触vue,14年开始熟悉这个轻量的框架,并慢慢的推荐给了身边的朋友,当我得知手淘的weex是基于vue的时候,就有了想了解一下的冲动。在weex开源之前,我刚好有几个月的时间一直在致力于ReactNative的优化改造,加上自己之前使用ReactJS的一些经验,对于ReactNative项目也算有了一些自己的见解。趁着weex开源了,赶在前几天,我花了两三天的时间把weex android的源码完整的看了一遍,前端js代码也粗略看了一下,结合自己对ReactNative源码的一些了解,正好在这里对两者做一个尽量中立的比对。

首先,我们要承认,weex的确是站在ReactNative的肩膀上的,核心思想上两者并没有大的区别,直观的看上去,我认为有三个主要的区别:

JS引擎:

weex使用V8, ReactNative使用JSCore

JS开发框架:

weex基于vue.js(2W+ star)。小巧轻量的前端开发框架,组件化,数据绑定,2.0引入virtual dom。

ReactNative使用React(4W+ star)。革命性的前端开发框架,组件化,数据绑定,virtual dom。

Android版本要求:

ReactNative使用了Choreographer,因此必须在API16以上才可以使用。

weex使用handler来代替Choreographer,可以在API14以上使用。

weex出来的初衷也是为了解决ReactNative使用过程中遇到的一些问题,当然具体决定使用那个框架,我觉得需要从一下几个方面来做对比:

学习成本

  1. 环境配置:

ReactNative需要按照文档安装配置很多依赖的工具,相对比较麻烦。
weex安装cli之后就可以使用

  1. vue vs react

react模板JSX学习使用有一定的成本
vue更接近常用的web开发方式,模板就是普通的html,数据绑定使用mustache风格,样式直接使用css

  1. 布局

两者实现了flexbox的相同子集(都使用了FaceBook的代码解析),基本没有区别

易用性

  1. sdk使用

ReactNative需要解决mvn依赖的问题,因此必须自己修改源码,打包发布

weex可以直接在mvn项目中使用

  1. 调试

都可以在chrome中调试JS代码

weex支持在chrome中预览页面dom节点,ReactNative不支持

  1. 页面开发

weex提供了一个playground,可以方便的预览正在开发的页面

ReactNative开发一个页面,需要建立一个native工程,然后编译运行

  1. 即时预览

weex和ReactNative都有提供hot reload功能,可以边更改代码,边在手机上看到效果

  1. 打包

ReactNative官方只能将ReactNative基础js库和业务js一起打成一个js bundle,没有提供分包的功能,需要制作分包打包工具

weex默认打的js bundle只包含业务js代码,体积小很多,基础js库包含在weex sdk中

  1. 部署

斑马目前同时支持weex和ReactNative页面,但是中心已经转向weex

另外斑马提供了可以拖拽搭建weex活动页面的功能

  1. 扩展性

组件的扩展上,weex和ReactNative具有一样的能力

三方库的接入上,weex对网络,图片,统计等常见的用户可能想自己定制的功能,提供了相应的适配接口,可以由用户方便的定制,ReactNative需要自己修改源码

  1. 集团库接入

weex有默认的mtop接入实现,UT接入实现

windvane也提供了对weex页面的支持,可以复用app中的web容器

  1. 跨平台

ReactNative支持Android iOS两个平台,需要自己扩展去支持web,windows和node-webkit的支持正在开发中

weex可以支持Android iOS web三个平台

  1. Moudle方法调用线程

weex 可以通过注解标注是否在UI线程执行

ReactNative在native_modules线程执行

  1. 异步

weex只支持callback

ReactNative提供了Promise的支持

性能

  1. 分包加载

ReactNative需要自己实现,从而优化JS加载执行时间

weex默认提供分包实现

  1. 官方支持

ReactNative官方关注的重心目前并不在性能上

weex持续关注性能优化

  1. 大块view渲染

ReactNative默认没有优化机制,长view渲染性能会比较差

weex提供了node和tree两种渲染模式,优化长view的渲染

  1. ListView Android

ReactNative目前采用scrollView使用,有一些性能问题

weex使用recyclerview实现,性能稍好

社区

ReactNative 3w+ star,issue,pull request, contributor多,社区活跃,围绕react产生了许多开发框架

weex开源较晚,目前只有4k+ start,contributor以阿里人为主,较少,issue和pull request也比较少,社区目前规模比较小

工具链

  1. debug tool

都有提供在chrome中调试的支持

  1. 打包工具

ReactNative需要自己改造

weex默认提供的足够满足使用需求

  1. webpack,gulp,脚手架工程

weex有相应的插件,方便开发,部署使用

ReactNative有,但是很久未更新,需要自己维护

通过上面的一些对比,就我个人来说,我还是比较倾向于使用weex,我比较熟悉vue是一方面,另外性能和发布这一块也是我比较关注的点。使用ReactNative确实也可以做到不错,但是最终我发现,自己其实是在做weex团队已经做的事情。与其这样,为什么我不选择weex,去帮助weex解决一些其他问题,给自己留更多时间去做业务开发呢?另外从业务开发的角度,我也觉得weex的门槛相对比较低,更适合业务开发同学上手,简单就是不简单。

欢迎大家和我讨论

目录
相关文章
|
移动开发 Java 开发工具
我的第一个reactnative
由于在做极光推送,前端使用的框架是reactnative,后台写好后为了测试一下,所以按照react官方的教程搭了遍react. 开发环境: 1.windows 7(建议各位如果开发react的最好还是买台mac,一台mac给你打价值远远大于mac机器自身的价值) 2.
1392 0
|
移动开发 JavaScript 前端开发
探索ReactNative应用
本篇文章是我看AC2016腾讯前端技术交流大会后写的。写的不好,大家见谅啊。 一,什么是ReactNative?   简单来说就是可以用javascript来写APP了,而且性能还不错。 用JS写的话已经有很多框架比如Cordova,Dcloud等等那为什么这些框架不行呢?主要还是因为它们是基于webview来做的,导致它们的性能不行。   React.js Conf
1799 0
|
移动开发
ReactNative升级到0.56以后,装饰器无法使用
解决方案 移除babel-plugin-transform-decorators-legacy npm install --save-dev @babel/plugin-proposal-decorators 配置.
1446 0
|
3月前
|
设计模式 前端开发 数据可视化
【第4期】一文了解React UI 组件库
【第4期】一文了解React UI 组件库
83 0
|
3月前
|
存储 前端开发 JavaScript
【第34期】一文学会React组件传值
【第34期】一文学会React组件传值
31 0
|
3月前
|
前端开发
【第31期】一文学会用React Hooks组件编写组件
【第31期】一文学会用React Hooks组件编写组件
33 0
|
3月前
|
存储 前端开发 JavaScript
【第29期】一文学会用React类组件编写组件
【第29期】一文学会用React类组件编写组件
30 0
|
3月前
|
前端开发 开发者
【第26期】一文读懂React组件编写方式
【第26期】一文读懂React组件编写方式
28 0
|
3月前
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
40 0
|
2月前
|
存储 前端开发 中间件
React组件间的通信
React组件间的通信
15 1