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

309 天前
 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 ,几乎没写什么东西,就路由和一些图标)

大家给点意见?

4592 次点击
所在节点    程序员
34 条回复
shaojian0702
309 天前
语法太畜生了,笑死我了
flyqie
309 天前
dart 的语法。。个人确实不太能接受。

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

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

但感觉 google 给 go 的资源。。似乎还行?
musi
309 天前
dart 这语法,搞个复杂点的布局,嵌套看得我不知道哪是哪
flyqie
309 天前
@flyqie #5

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

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

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

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

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

微信 chooseimage 白屏

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

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

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

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

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

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

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

https://www.v2ex.com/t/955166

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

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

© 2021 V2EX