![9fc9a541fbfc6f90e56f8be402eda715.png](https://i-blog.csdnimg.cn/blog_migrate/e028b0c53bf6563c7b272f3a79212eb8.jpeg)
在《
移动端跨平台开发的深度解析
》一文中,我们主要针对 React Native 、Weex 和 Flutter 的原理与特性进行了一个深度的解析。
这篇文章我们主要就各个方面对这三个框架对一个对比,同时分析一下三个框架未来的发展趋势。
对比
我们先通过一个表格来看一下三者之间的一个大致对比:
![c1f55dbb2b2d085be1ef29964a7c406b.png](https://i-blog.csdnimg.cn/blog_migrate/4a8be90a99639e3f3827483f2c550c2a.png)
大小
上面 Apk 大小是通过 react-native init 、weex create 和 flutter 创建出的工程后,直接不添加任何代码,打包出来的 release 签名 apk 大小。从下图可以看出,其中大比例都是在 so 库。
![4c74040a672160021f96e8ce61734586.png](https://i-blog.csdnimg.cn/blog_migrate/a5da4eb68f83167b17c470765d2b45b3.jpeg)
社群
React Native 作为 Facebook 主力开源项目之一,如今已有各类丰富的第三方库,
甚至如realm 、lottie 等开源项目也有 React Native 相关的版本,社群实际无需质疑。当然,因为并完全正统开发平台,第三库的健壮性和兼容性有时候总是良莠不齐。
Weex 其实有种生错在国内的感觉。其实 Weex 的设计和理念都很优秀,性能也不错,但是对比 React Native 的第三方支持,就显得有点后妈养的。
2016 年开源至今,社区和各类文档都显得有点疲弱,作为跨平台开发人员,很多时候肯定不会希望,需要频繁的自己增加原生功能支持,因为这样的工作一 多,反而会与跨平台开发的理念背道而驰,带来开发成本被维护难度增加。
Flutter 虽然发布不久,但是谷歌的号召力一直很可观,这一点无需质疑。性能理论上 Flutter 的性能应该是最好的,但是目前实际体验中,却并没有感受出来太大的差距,和 React Native ( 0.5.0 之后)、 Weex 在性能上个人体验差异不是很大。当然,这里并没有实测渲染的毫秒时间和帧率数据。
其他区别
Weex 在 native 端是不支持 的
,这一点和 React Native 不同在于,
如果在native 需要实现页面跳转,使用 vue-router 将会惨不忍睹:返回后页面不做特别处理时,是会空白一片。native端采用weex. requireModule('navigator') 跳转 Activity 是才正确实现。
同时,Weex 中 navigator 跳转的设计,也导致了多口页面的页面间通讯的差异。
Weex 在多口页面下的数据通讯,是通过url 实现的
,比如file://assets/dist/SecondPage.js?params=0,
而vuex 和 vue-router 在跨页面是无法共用的;
但
React Native 在跨 Actvity 使用时,因为是同一个 bundle 文件,只要 manager 相同,那么 router 和 store 时可以照样使用的,
数据通信方式也和单个 Actvity 没区别。
Weex 和 React Native 模板代码模式也不同。Weex 的模板是从 cordova 模式修改过来的,根据platform 需求,用命令添加固定模块,而在.gitignore 对 platforms 文件夹是忽略跟踪。React Native 在项目创建时模版就存在了,特别是添加第三方插件原生端支持时,会直接修改模板代码, git 代码中也会添加跟踪修改。
未来趋势
我们选择框架的时候,很多时候会关注框架的成熟度和生命力。
React Native
“ Airbnb 宣布放弃使用 React Native ,回归使用原生技术” :Airbnb 作为 React Native 平台上最大的支持者之一,
其开源的 lottie 同样是支持原生和 React Native 。
Airbnb 在宣布放弃的文中,也对 React Native 表示了大量的肯定。而使得他们放弃的理由,其实主要还是集中于项目庞大之后的维护困难,第三方库的良莠不齐,兼容上需要耗费更多的精力导致放弃。
![3afa5606493ec7f610aa590dd95a2353.png](https://i-blog.csdnimg.cn/blog_migrate/7f4fc5e21c940e74f1cc909e4298d3ca.png)
Facebook 正在重构 React Native ,将重写大量底层。在经历了开源协议风波后,可以看出 Facebook对于 React Native 还是很看重的, 这些底层重构优化的地方,主要集中于:
首先,改变线程模型。UI 更新不再需要在三个不同的线程上执行,而是可以在任意线程上同步调用JavaScript进行优先更新,同时将低优先级工作推出主线程,以便保持对 UI 的响应。
其次,将异步渲染功能引入 React Native 中,允许执行多个渲染并简化异步数据处理。最后,简化桥接,让它更快、更轻量。原生和 JavaScript 之间的直接调用效率更高,并且可以更轻松地构建调试工具,如跨语言堆栈跟踪。
Weex
Weex 没有死!阿里公开 Weex 技术架构,还开源了一大波组件。2018 年初的新闻可以看出, Weex 的遭遇有点类似曾经的 Duddo ( Dubbo 因为内部竞争被阿里曾一度放弃维护),这波诈尸后 Weex 被托管到了 Apache ,而 github 的 weexteam 如今也还保持着更新,希望后续能有多好的发展,拭目以待吧。
Flutter
Flutter是Google跨平台移动 UI 框架
,Dart作为谷歌的亲儿子在 Flutter中使用,并且谷歌新操作系统 Fuchsia 支持 Dart ,使用 Flutter 作为操作 UI 框架。这些集合到一起难免让你怀疑 Android 是否要被谷歌抛弃的想法。
或者如今先 Android 等平台上推广 Flutter 与 Dart ,就是为了以后更好的过渡到新系统上,毕竟开发者是操作系统的生命源泉之一。而 Java 与 JVM 或者可以被谷歌完全抛开。
Swi!UI
2019 年 WWDC 大会上,苹果在压轴环节向大众宣布了基于 Swi!
语言构建的全新 UI 框架 ——Swi!UI 。开发者可通过它快速为所有的 Apple 平台创建美观、动态的应用程序。
据官方介绍, Swi!UI 是一个创新且非常方便使用的框架,开发者通过 Swi! 语言的强大功能即可为苹果的所有硬件设备构建用户界面 —— 只需使用一套工具和 API 。
此外,
Swi!UI 使用了声明式的 Swi! 语法,可读性比较高,编写起来也比较容易理解。
S
wi!UI 可与新的 Xcode 设计工具无缝协作,让代码和设计
完美同步,还提供对动态类型、暗黑模式、本地化和可访问性的自动支持。
鉴于苹果公司的强大影响力, Swi!UI 未来的发展还是可以期待一下的。
今天沃师傅的知识小课堂就到这里,朋友们,下次见~
![7de66aa08e5cdfa176b50f8581411562.png](https://i-blog.csdnimg.cn/blog_migrate/84611612d3baab5e2dedb6cf78ebd530.png)