本人最近在写一个设备的控制端,可以制作成手机APP或网页。我所知道如何使用的开发方式只有React Native和Flutter。一开始打算使用React Native进行开发,后来因为遇到的问题太多了,所以转而使用Flutter进行开发,两小时完成了我之前写了几天React Native的工作量。

本文将从各个我最关注的方面对二者进行比较。

环境配置 链接到标题

React Native需要先安装npm,再使用命令行工具创建项目。

如果使用的是Expo,可以在云端构建APP,也可以在本地的Linux或MacOS(不支持Windows)上安装JDK和安卓的SDK及其命令行工具并进行构建。顺带一提,Expo编译是真的很慢很慢。

如果不使用Expo则只需要确保你有JDK和Android SDK和一些其它命令行工具,然后进行编译即可。

然而,Flutter可以直接安装Dart和Flutter以及Android SDK及其命令行工具,再新建一个Flutter项目,直接编译不会遇到什么问题。

另外,我在使用Expo构建的时候经常因为网络原因卡着不动,而Flutter没有遇到这个问题。应该是我机场IP不干净,然后被Expo拉的仓库的服务器屏蔽了。

不只是我,我在网上看到许多人也觉得Flutter比React Native的安装成功概率大。

这把Flutter胜。

开发体验 链接到标题

React Native可以用JS或者TS。Flutter只能使用Dart。

作为一个坚定的Object Pascal拥护者,以上用的语言对我而言都有些陌生,但是基本上看一眼示例就会写了。所以使用的语言这一块其实没有多大影响。

另外个人感觉各种Flutter的教程/文档都比React Native的教程/文档易于理解。在查阅资料时,因为React本身是一个Web前端框架,但是React Native与React不完全兼容,这会导致我在查阅有关资料的时候不能闭着眼睛从stack overflow复制粘贴。

再一个是如果我用React Native进行开发,我需要拖着一个质量比黑洞还大的node_modules,这玩意儿我看着觉得太膈应了,大大的抵触。

这把Flutter胜。

生态 链接到标题

经常需要用到一些花里胡哨的组件。

很多时候是React有,但是React Native不兼容。

我之前尝试用create-react-native-app创建应用程序,然后不知道怎么创建路由以及跳转了。以及我直到把React Native项目的目录删掉,也没有明白上面标注的“Web”到底是想让我怎么把这玩意儿部署成Web应用程序。这些问题在Expo上不存在,但是我不太想用Expo,因为Expo又在某些方面对我非常不友好。

上述问题在Flutter里不能说完全不存在,至少我还没遇到过。

这把Flutter胜。

构建 链接到标题

我抵制绝对封闭的苹果,所以没有构建苹果应用的打算。这里建立在我使用安卓和Web端的条件下讨论这个问题。

React Native(包含Expo)和Flutter的构建Release的默认配置,都是构建Universal的安装包,里面封装了所有架构上使用的库。但其实我没有这方面需求,或者说我更希望是把不同平台的APP打包成不同的apk安装包,因为我自己几乎只使用aarch64。

React Native(非Expo)可以通过修改Gradle配置文件来实现我的需求。

Expo如果按照官方的方式使用eas build,则完全不支持我的需求。当然也可以给gradle注入,但是这很麻烦,需要写一个单独的js,然后把它添加到eas.json里。

而且这玩意儿会直接去我的/tmp里面拉屎,把我的项目文件拷贝一份进去,再生成不同平台的构建的工具链。当然也可以使用prebuild,然后会在项目目录下面创建不同平台的工具链,手动运行gradlew就好了。

Flutter只需要给构建命令加个参数就可以达到我的需求,非常省事。另外Flutter构建的速度比上述二者都要快得多。

还有一点,在大家都使用aarch64的情况下,expo构建的文件最大,crna其次,最后才是Flutter。

这把Flutter胜。

体验 链接到标题

对于最后发布出来的应用,二者相比起来怎么样,其实我没有自己测试过,因为我没有高性能这方面的需求。

不过参考了一些文章,应该还是Flutter胜。这个我没有证实过,不过应该是属实的吧。

参考:https://www.zhihu.com/tardis/bd/art/70070316

总结 链接到标题

对我而言,在我的这个应用中,Flutter比起React Native,那是遥遥领先,遥遥领先,遥遥领先,遥遥领先,遥遥领先,遥遥领先,遥遥领先,遥遥领先,遥遥领先,遥遥领先,遥遥领先,遥遥领先,遥遥领先,遥遥领先,遥遥领先,遥遥领先……