7.2.2 Weex 和 React Native 的对比
本节将从使用现状、技术架构、开发环境等几个方面对比 Weex 和 React Native。1.使用现状
( 1) Weex
据不完全统计,在应用商店前 500 的 App 中,有 22 个使用了 Weex,主要是阿里系应用(如淘宝、 UC 等),此外企鹅电竞、网易考拉海购等非阿里系应用也使用了 Weex。
Weex 社区活跃度相对较低,主要集中在国内,与 Vue 开发社区基本重叠。如果开发者有关于 Weex 的问题,最好用的搜索引擎是百度而不是 Google。当然,作为阿里系产品, Weex最大的活跃社区在 ATA 中, Star 数为 9000 多。
( 2) React Native
据不完全统计,在应用商店前 500 的 App 中,有 33 个使用了 React Native,涉及各类App。作为开源最早的 Hybrid 架构, React Native 受到很多第三方开发者的拥护。
React Native 主要由 Facebook 团队人员维护,已经在 GitHub 上开源,也有外部人员参与共同维护,目前 Star 数已经超过 6.3 万。
2.技术架构
( 1) Weex
Weex 的设计理念是“ Write once, run anywhere”,其主要的设计部分如下。
JavaScript Bundle 开发
结合 Vue 开发环境,直接使用 Vue 开发的 JavaScript 代码,并将页面打包成 JavaScript Bundle。
服务器
将 JavaScript Bundle 部署到服务器中,客户端或者 Web 通过相关链接访问 JavaScript Bundle。
JSR
即 JavaScript Runtime,解析 JavaScript 代码,将 JavaScript 代码与本地开发接口做关联,让 JavaScript 代码可以访问本地接口。
Layout Engine
Layout Engine 是一个布局转换框架,它将 Vue 布局、 CSS 和 DOM 标签转换成对应操作系统的相关布局格式,然后通过本地 JavaScript 引擎去做渲染。
具体架构图如图 7-2 所示。
( 2) React Native
React Native 的设计理念是跨平台运行,主要在 Android/iOS 双端,不支持 Web 端页面。
JavaScript Bundle 开发
与 Weex 相似, React Native 也是将 JavaScript 代码转换成 JavaScript Bundle,但不同的是,编程框架用的是 React。
服务器
将 JavaScript Bundle 部署到服务器中,客户端或者 Web 端通过相关链接访问 JavaScript Bundle。
JavaScript VM
解析 JavaScript 运行环境,并与本地相关接口做映射。在 Android 平台为 V8 内核,在 iOS平台为 JavaScript Core 引擎。