1,异同点
相同点:
都采用Web的开发模式,使用JS开发;
都可以直接在Chrome中调试JS代码;
都支持跨平台的开发;
都可以实现hot reload,边更新代码边查看效果;
不同点:
JS引擎
weex在iOS上使用JSCore而在安卓上使用了V8
ReactNative使用JSCore
学习成本
1.环境配置:
ReactNative需要按照文档安装配置很多依赖的工具,相对比较麻烦。weex安装cli之后就可以使用
2.vue vs react:上面已经做过对比
react模板JSX学习使用有一定的成本vue更接近常用的web开发方式,模板就是普通的html,数据绑定使用mustache风格,样式直接使用css
易用性
1.sdk使用
ReactNative需要解决mvn依赖的问题,因此必须自己修改源码,打包发布
weex可以直接在mvn项目中使用
2.调试
都可以在chrome中调试JS代码
weex支持在chrome中预览页面dom节点,ReactNative不支持
3.页面开发
weex提供了一个playground,可以方便的预览正在开发的页面
ReactNative开发一个页面,需要建立一个native工程,然后编译运行
4.即时预览
weex和ReactNative都有提供hot reload功能,可以边更改代码,边在手机上看到效果
5.跨平台
ReactNative支持Android iOS两个平台,需要自己扩展去支持web,windows和node-webkit的支持正在开发中
weex可以支持Android iOS web三个平台
性能
1.分包加载
ReactNative需要自己实现,从而优化JS加载执行时间
weex默认提供分包实现
2.官方支持
ReactNative官方关注的重心目前并不在性能上
weex持续关注性能优化
3.大块view渲染
ReactNative默认没有优化机制,长view渲染性能会比较差
weex提供了node和tree两种渲染模式,优化长view的渲染
扩展性
ReactNative:所有RN的native底层,都是一个个的模块Module,完全解耦,随意灵活扩展插拔移除,而且支持开发者自行构建完全自己的Module,无论是界面还是数据网络接口。
三方库的接入上,weex对网络,图片,统计等常见的用户可能想自己定制的功能,提供了相应的适配接口,可以由用户方便的定制,ReactNative需要自己修改源码
社区支持
Weex开源较晚,互联网上相关资料还比较少,社区规模较小;
React Native社区则比较活跃,可以参考的项目和资料也比较丰富
2,优势分析:
Weex的优势:
轻量级
Weex使用标签化语言,语法非常简单,使用Vue.js框架,学习成本较低,对于前端开发尤甚.
扩展性强
Weex封装了丰富的组件和api,可以完成各种定制化的需求
高性能
Weex使用纯本地渲染,体验更好;可以实现热更新.
跨平台
Weex实现了Write Once Run Everywhere,并且适配了Web端,这与RN的Learn Once Write Everywhere和只适配iOS和android不同.
RN:
社区则比较活跃,可以参考的项目和资料也比较丰富,有丰富的组件
3,开发中的问题:
Weex:在使用中发现了Weex的一些不足之处,现做个简单说明.
不支持本地图片
Weex内的image标签只能设置网络图片,不支持本地图片的使用
style标签不够丰富
相比Web灵活的style标签,Weex只支持一部分特定的Flex标签
总结:Weex因为主打的是Write Once Run Everywhere,所以对于Native端一些常见的功能,类似打开相机,需要自己进行封装,所以Weex更适合开发用于展示页面和页面内交互的项目.
RN:不太建议完全使用RN,因为Facebook也在不断填坑,每个月都有新版本,一个长期项目经不起频繁换依赖库的版本;我们公司也只是作为业余研究性质,不过RN的热更新思路真心不错,可以随时更换功能模块。需要注意的是,热更新和在线更新是不一样的,分别对应的是hot-reloading和reload,调试时是通过hot选项控制;鉴于hot-reloading需要和服务器实时保持一个socket长连接和既有的不确定性,我不相信会有公司会采用hot-reloading的方案,应用于生产环境。如果真的应用hot-reloading了,那就分享下心得