
总体需求
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 ,几乎没写什么东西,就路由和一些图标)
大家给点意见?
1 shaojian0702 2023-07-08 21:26:01 +08:00 via Android 语法太畜生了,笑死我了 |
2 flyqie 2023-07-08 21:30:16 +08:00 dart 的语法。。个人确实不太能接受。 基本是看一次劝退一次。。。 |
3 0o0O0o0O0o 2023-07-08 21:30:34 +08:00 via iPhone 同求建议: - 三个桌面平台两个移动平台和 WEB 都想要 - 需要上架,apple store 、google play 、ms store - 无所谓语言,但希望尽可能真的一套代码跨平台 - 尽量能别和原生打交道 - 希望社区火热,不需要自己踩坑 |
4 adjusted 2023-07-08 21:37:46 +08:00 你这个项目我会选择 react native 。其实 ios 应用排行榜上很多应用都有 react native, 还有 expo 支持,而且我感觉 meta 内部用 react native 应该比谷歌内部用 flutter 多,目前来看 flutter 完全靠谷歌风险反而大很多。而且你这个项目本来就是 web ,开发上手 react native 也比 flutter 容易多了。 |
6 musi 2023-07-08 21:44:20 +08:00 via iPhone dart 这语法,搞个复杂点的布局,嵌套看得我不知道哪是哪 |
8 dcsuibian 2023-07-08 21:56:15 +08:00 我不是这方面的专家,但我还是想要发表一下我的观点,在我仔细看过你的问题经过长时间的思考后,我其实也不知道要怎么回答,正如我一开始说的,我不是这方面的专家。 |
9 dcsuibian 2023-07-08 22:02:11 +08:00 |
10 debuggerx 2023-07-08 23:42:02 +08:00 via Android 虽然总体来说我是 flutter 派,但是你这个情况,明显还是原生开发最适合吧,核心 webview 又有接原生页面的需求,不管是 rn 还是 flutter 都是脱裤子放屁吧 |
11 debuggerx 2023-07-08 23:49:02 +08:00 via Android 另外 dart 语法其实非常均衡且常规,语言本身没什么好黑的,觉得语法丑的那是因为没有理解 flutter 的设计思想,以及还没领悟到 UI 的本质其实就是嵌套,嵌套的描述性代码才是最符合直觉和原始意义的,觉得嵌套深就找不到北的,一是不够熟悉,二是不会善用 inspector…… |
12 owen800q 2023-07-08 23:58:20 +08:00 react native webview + H5 , 不二之,按你在上面的,我想不到一理由要把部分面重 camera 相的直接在 RN ,把照片/qr code 之的果 H5 不就好了,只要保把 camera 和 webview 包在同一件,完全不有白屏,只能 RN 的那解似的 |
14 murmur OP @debuggerx 不是接近原生页面的需求,是迫于 ios 下白屏被迫重写一些核心业务代码,不涉及拍照的还是用 h5 做,我们的分析是那个页面用了高德地图,新的高德地图是 webgl 渲染,超级吃资源,再调个相机分分钟杀进程 jsx 也是嵌套,好处是几乎所有的样式都可以在 style 里完成,你不需要管原组件提供了什么参数 dart 那种一堆 children 嵌套起来真的是丑陋,他 children 也是要闭合的啊,代码长度比 jsx 小了么,甚至嵌套地狱下 IDE 被迫提供了看闭合的括号是哪个的功能 |
15 kuituosi 2023-07-09 11:19:53 +08:00 via Android 技术上其实没有什么可以比较的,各自生态都能进化。说生态危险的就是搞笑,苹果再牛逼也不敢得罪大量 flutter 用户,要封杀早就动手了。国内应用选 flitter ,国外应用选 rn 。原因是国内应用生态对 rn 支持非常弱,你随便集成第三方的 rn 可能无法提供,但是 flutter 通常都会有。国外恰恰相反,rn 非常流行,提供的第一选项支持是 rn |
16 owen800q 2023-07-09 11:50:20 +08:00 @murmur 那只要把原生相的功能用 RN 重就好,UI 相的沿用原的 H5 就好了,只要把 webview 同原生件 包在同一件就好,完全不有白屏 |
17 murmur OP @owen800q 微信 chooseimage 白屏 用这些关键字搜能搜出非常多的结果 微信不会不知道给 webview 包壳就可以把,而且 wkwebview 是多进程,他怎么知道自己被包在哪里该不该 crash 唯一能做的就是业务部分和主界面独立开,这样白屏了做恢复的时候只要恢复业务就可以,不至于主程序也跟着白 |
18 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…… |
19 cnhongwei &nsp;2023-07-09 15:24:36 +08:00 RN 吧,对 flutter 还有一个不爽的地方就是 json 的处理。 |
20 mynameislihua 2023-07-09 18:24:07 +08:00 @cnhongwei JSON 处理确实恶心,为什么不能像 java 一样,加个注解什么的自动就生成代码 |
21 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 |
23 murmur OP @xulihang 有啊。cordova 的插件调用的就是官方相机,有考虑过重写一个简陋的相机专门拍照,但是既然微信小程序都没能解决,那除了受影响的功能拿出 webview 也没什么好办法 |
24 n3r0 2023-07-10 10:13:19 +08:00 需要 h5 复用和 webview 核心,以及集成原生 view 。你这需求用跨平台真是一点好处没捞到呀……还是用原生吧,部分抽出来改写一下。 另外 2023 年了还有人嫌 flutter 的 UI 写法嵌套丑陋,合着拆分是一点都不愿意做呀,写业务逻辑也不至于一个方法从头到尾吧。要是真有那么恶心就不会发展的这么快了。相比于之前安卓写 XML ,几个群里普遍都觉得是好几倍的效率提升,同样 compose 这些新的声明式 UI 框架也是类似的写法,基本就是未来的趋势了。 虽然 flt 问题也不少,说说多窗口字体渲染编辑器输入法候选框 json 解析大家都认同,老看这些吐槽不到点子上的也是很槽心了。。 |
25 murmur OP @n3r0 这是被迫的,我查了那么多资料,能解决 wkwebview 白屏的问题就只有不用 webview ,连微信和微信小程序都搞不定这个问题 我们的问题比微信小程序还严重点,微信小程序拍照一般就是传个发票发个商品,我们有的页面要求拍照几十张,就算缩图内存占用也很恐怖 |
26 murmur OP @n3r0 业务部分代码用原生写太恐怖了,那种复杂的表格和表单用原生渲染,想想都头大,但是因为这部分业务还得能跑在微信(部分页面),所以还是得找个跨平台非 h5 框架 |
27 tool2d 2023-07-10 10:18:10 +08:00 flutter 写新项目可以,可老项目那么多页面和代码需要推翻重写,工作量巨大,同事未必愿意。 |
28 n3r0 2023-07-10 10:21:05 +08:00 @murmur 那就只能原生了。。几十张图稍微处理不好就 OOM 了,RN 不知道,flutter 这个场景感觉还比较薄弱,基本没啥自带优化的,缓存啥的都得自己做。 |
29 androidzai 2023-07-10 12:07:38 +08:00 webview 是核心推荐 RN 。一来 webview 支持好,二来技术栈也比较相似。 |
30 npe 2023-07-10 15:34:30 +08:00 ReactNative 成熟度来说会好些,这方面招人成本也低一些。 |
31 yemoluo 2023-07-10 16:02:39 +08:00 我,我会写 Flutter 插件,但是我不会写 RN 插件,也是无语了 |
32 murmur OP @GTim 我以前维护过 cordova 的插件,贼简单,rn 的插件我也看不懂,除了一大堆 c 、c++的代码外,还有巨复杂的 gradle 指令 |
33 murmur OP @androidzai 放弃 rn 了,体验太差了,那个 metor 编译器动不动就闪退,开了调试模式之后直接 app 都起不来了,也不知道哪个插件出了兼容问题,直接是 so 报错都不知道哪里改 说是 react 结果一堆 js 库兼容问题 |
34 simpleH 2023-09-13 20:50:36 +08:00 留个脚印,在接触 flutter ,"语法太 tm 畜生了" |