老生常谈的技术选型 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 条回复
shaojian0702
2023-07-08 21:26:01 +08:00
语法太畜生了,笑死我了
flyqie
2023-07-08 21:30:16 +08:00
dart 的语法。。个人确实不太能接受。

基本是看一次劝退一次。。。
0o0O0o0O0o
2023-07-08 21:30:34 +08:00
同求建议:
- 三个桌面平台两个移动平台和 WEB 都想要
- 需要上架,apple store 、google play 、ms store
- 无所谓语言,但希望尽可能真的一套代码跨平台
- 尽量能别和原生打交道
- 希望社区火热,不需要自己踩坑
adjusted
2023-07-08 21:37:46 +08:00
你这个项目我会选择 react native 。其实 ios 应用排行榜上很多应用都有 react native, 还有 expo 支持,而且我感觉 meta 内部用 react native 应该比谷歌内部用 flutter 多,目前来看 flutter 完全靠谷歌风险反而大很多。而且你这个项目本来就是 web ,开发上手 react native 也比 flutter 容易多了。
flyqie
2023-07-08 21:40:23 +08:00
@adjusted #4

go 跟 flutter ,虽然不是同一类。

但感觉 google 给 go 的资源。。似乎还行?
musi
2023-07-08 21:44:20 +08:00
dart 这语法,搞个复杂点的布局,嵌套看得我不知道哪是哪
flyqie
2023-07-08 21:54:03 +08:00
@flyqie #5

又了解了一下。。感觉。。似乎也不太行。。
dcsuibian
2023-07-08 21:56:15 +08:00
我不是这方面的专家,但我还是想要发表一下我的观点,在我仔细看过你的问题经过长时间的思考后,我其实也不知道要怎么回答,正如我一开始说的,我不是这方面的专家。
dcsuibian
2023-07-08 22:02:11 +08:00
@dcsuibian 开玩笑的,只能说看团队吧。
如果对 javascript 本身已经比较熟悉了,那么选 react native 。
Flutter 的优点主要体现在其 UI 一致性和性能上。
debuggerx
2023-07-08 23:42:02 +08:00
虽然总体来说我是 flutter 派,但是你这个情况,明显还是原生开发最适合吧,核心 webview 又有接原生页面的需求,不管是 rn 还是 flutter 都是脱裤子放屁吧
debuggerx
2023-07-08 23:49:02 +08:00
另外 dart 语法其实非常均衡且常规,语言本身没什么好黑的,觉得语法丑的那是因为没有理解 flutter 的设计思想,以及还没领悟到 UI 的本质其实就是嵌套,嵌套的描述性代码才是最符合直觉和原始意义的,觉得嵌套深就找不到北的,一是不够熟悉,二是不会善用 inspector……
owen800q
2023-07-08 23:58:20 +08:00
react native webview + H5 , 不二之選,按你在上面寫的,我想不到一個理由要把部分頁面重寫
camera 相機的直接在 RN 實現,把照片/qr code 之類的結果傳進 H5 不就好了,只要確保把 camera 和 webview 包在同一個組件,完全不會有白屏,只能說寫 RN 的那個開發沒解決過類似問題的經驗
murmur
2023-07-09 09:03:10 +08:00
@owen800q 以前是 cordova 的框架,只有一个 wkwebview ,如果调用 ios 拍照,杀的是 wkwebview 的一个进程,然后就会导致整个应用白屏卡死

这个是无解的,微信公众号更严重,毕竟 3A 大作,小程序据说重写了相机稍微好一点,但是还是概率白屏

唯一的方法就是不要用 h5 写核心业务,做 webview 自恢复问题太多了,尤其是涉及一堆页面的数据保存,体感也不好
murmur
2023-07-09 09:06:47 +08:00
@debuggerx 不是接近原生页面的需求,是迫于 ios 下白屏被迫重写一些核心业务代码,不涉及拍照的还是用 h5 做,我们的分析是那个页面用了高德地图,新的高德地图是 webgl 渲染,超级吃资源,再调个相机分分钟杀进程

jsx 也是嵌套,好处是几乎所有的样式都可以在 style 里完成,你不需要管原组件提供了什么参数

dart 那种一堆 children 嵌套起来真的是丑陋,他 children 也是要闭合的啊,代码长度比 jsx 小了么,甚至嵌套地狱下 IDE 被迫提供了看闭合的括号是哪个的功能
kuituosi
2023-07-09 11:19:53 +08:00
技术上其实没有什么可以比较的,各自生态都能进化。说生态危险的就是搞笑,苹果再牛逼也不敢得罪大量 flutter 用户,要封杀早就动手了。国内应用选 flitter ,国外应用选 rn 。原因是国内应用生态对 rn 支持非常弱,你随便集成第三方的 rn 可能无法提供,但是 flutter 通常都会有。国外恰恰相反,rn 非常流行,提供的第一选项支持是 rn
owen800q
2023-07-09 11:50:20 +08:00
@murmur 那只要把原生相關的功能用 RN 重寫就好,UI 相關的沿用原來的 H5 就好了,只要把 webview 同原生組件 包在同一個組件就好,完全不會有白屏
murmur
2023-07-09 12:11:17 +08:00
@owen800q

微信 chooseimage 白屏

用这些关键字搜能搜出非常多的结果

微信不会不知道给 webview 包壳就可以把,而且 wkwebview 是多进程,他怎么知道自己被包在哪里该不该 crash

唯一能做的就是业务部分和主界面独立开,这样白屏了做恢复的时候只要恢复业务就可以,不至于主程序也跟着白
runze
2023-07-09 12:21:33 +08:00
@debuggerx #11
“另外 dart 语法其实非常均衡且常规,语言本身没什么好黑的,觉得语法丑的那是因为没有理解 flutter 的设计思想,以及还没领悟到 UI 的本质其实就是嵌套,嵌套的描述性代码才是最符合直觉和原始意义的,觉得嵌套深就找不到北的,一是不够熟悉,二是不会善用 inspector……”

这种话可以套给任何东西:

另外 go 语法其实非常均衡且常规,语言本身没什么好黑的,觉得语法丑的那是因为没有理解 go 的设计思想,以及还没领悟到 错误 的本质其实就是 if ,重复的 if err != nil 代码才是最符合直觉和原始意义的,觉得 if 多就找不到北的,一是不够熟悉,二是不会善用 debugger……

另外 XXX 语法其实非常均衡且常规,语言本身没什么好黑的,觉得语法丑的那是因为没有理解 XXX 的设计思想,以及还没领悟到 AAA 的本质其实就是 BBB ,CCC 才是最符合直觉和原始意义的,觉得 DDD 就找不到北的,一是不够熟悉,二是不会善用 EEE……
cnhongwei
2023-07-09 15:24:36 +08:00
RN 吧,对 flutter 还有一个不爽的地方就是 json 的处理。
mynameislihua
2023-07-09 18:24:07 +08:00
@cnhongwei JSON 处理确实恶心,为什么不能像 java 一样,加个注解什么的自动就生成代码

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

https://tanronggui.xyz/t/955166

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

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

© 2021 V2EX