老生常谈的技术选型 react native vs flutter ?

2023-07-08 21:17:42 +08:00
 murmur

总体需求

1 、办公类应用,企业证书,不需要上市场

2 、有集成 fragment 或者 ios 原生组件的需求(第三方提供的 sdk 和界面)

3 、webview 是核心,因为大多数业务是 cordova 迁移过来的,这部分大概有 100 多个页面,所以重写的大概 20-30 个页面左右

4 、重构只是因为 ios 相机启动 wkwebview 白屏太烦了,核心业务准备重写,这部分还得能转成 h5 复用

5 、安卓、ios 开发都是其他开发兼职

选 flutter 的理由

1 、社区热度更高,有很多国内厂商甚至提供官方插件

2 、界面一致性更好处理

3 、google 背书不容易倒

4 、dart 虚拟机编译的东西比 js bundle 不容易反解

选 react native 的理由

1 、jsx 的语法太舒服了

2 、因为 rn 渲染的都是 native ,所以无论集成 fragment 还是 view 都是手到擒来的事情

3 、rn 的 webview 似乎比 flutter 强一些

4 、rn 的 web 比 flutter 好点

不选 flutter 的理由

1 、语法太 tm 畜生了

2 、官方似乎只提供了集成 view 的说明

不选 rn 的理由

1 、直到新架构还是实验期,正式上的只有新的 js 编译器

2 、插件不支持热加载(热加载插件是实验特性)

3 、如果不优化的话包大的可怕( debug ~50m ,几乎没写什么东西,就路由和一些图标)

大家给点意见?

5873 次点击
所在节点    程序员
34 条回复
moonrailgun
2023-07-10 00:47:11 +08:00
如果主要是 webview 的话,我的建议是 rn 。因为我调研下来 flutter 的 webview 不如 rn 的 webview 。(甚至本来还考虑过 uniapp 的 w2a 方案不过正如 op 所说太畜生了)

这是我的项目可供参考, 一些与 webview 通信与相互调用的实践: https://github.com/msgbyte/tailchat/tree/master/client/mobile
xulihang
2023-07-10 09:49:18 +08:00
@murmur 拍照用 cordova 的插件也会有杀 wkwebview 的问题吗
murmur
2023-07-10 09:59:13 +08:00
@xulihang 有啊。cordova 的插件调用的就是官方相机,有考虑过重写一个简陋的相机专门拍照,但是既然微信小程序都没能解决,那除了受影响的功能拿出 webview 也没什么好办法
n3r0
2023-07-10 10:13:19 +08:00
需要 h5 复用和 webview 核心,以及集成原生 view 。你这需求用跨平台真是一点好处没捞到呀……还是用原生吧,部分抽出来改写一下。

另外 2023 年了还有人嫌 flutter 的 UI 写法嵌套丑陋,合着拆分是一点都不愿意做呀,写业务逻辑也不至于一个方法从头到尾吧。要是真有那么恶心就不会发展的这么快了。相比于之前安卓写 XML ,几个群里普遍都觉得是好几倍的效率提升,同样 compose 这些新的声明式 UI 框架也是类似的写法,基本就是未来的趋势了。

虽然 flt 问题也不少,说说多窗口字体渲染编辑器输入法候选框 json 解析大家都认同,老看这些吐槽不到点子上的也是很槽心了。。
murmur
2023-07-10 10:15:28 +08:00
@n3r0 这是被迫的,我查了那么多资料,能解决 wkwebview 白屏的问题就只有不用 webview ,连微信和微信小程序都搞不定这个问题

我们的问题比微信小程序还严重点,微信小程序拍照一般就是传个发票发个商品,我们有的页面要求拍照几十张,就算缩图内存占用也很恐怖
murmur
2023-07-10 10:17:20 +08:00
@n3r0 业务部分代码用原生写太恐怖了,那种复杂的表格和表单用原生渲染,想想都头大,但是因为这部分业务还得能跑在微信(部分页面),所以还是得找个跨平台非 h5 框架
tool2d
2023-07-10 10:18:10 +08:00
flutter 写新项目可以,可老项目那么多页面和代码需要推翻重写,工作量巨大,同事未必愿意。
n3r0
2023-07-10 10:21:05 +08:00
@murmur 那就只能原生了。。几十张图稍微处理不好就 OOM 了,RN 不知道,flutter 这个场景感觉还比较薄弱,基本没啥自带优化的,缓存啥的都得自己做。
androidzai
2023-07-10 12:07:38 +08:00
webview 是核心推荐 RN 。一来 webview 支持好,二来技术栈也比较相似。
npe
2023-07-10 15:34:30 +08:00
ReactNative
成熟度来说会好些,这方面招人成本也低一些。
GTim
2023-07-10 16:02:39 +08:00
我,我会写 Flutter 插件,但是我不会写 RN 插件,也是无语了
murmur
2023-07-10 16:04:38 +08:00
@GTim 我以前维护过 cordova 的插件,贼简单,rn 的插件我也看不懂,除了一大堆 c 、c++的代码外,还有巨复杂的 gradle 指令
murmur
2023-07-11 16:45:37 +08:00
@androidzai 放弃 rn 了,体验太差了,那个 metor 编译器动不动就闪退,开了调试模式之后直接 app 都起不来了,也不知道哪个插件出了兼容问题,直接是 so 报错都不知道哪里改

说是 react 结果一堆 js 库兼容问题
simpleH
2023-09-13 20:50:36 +08:00
留个脚印,在接触 flutter ,"语法太 tm 畜生了"😭

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/955166

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX