V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
niubee1
V2EX  ›  程序员

最新感悟,全栈开发不如共栈开发,省时省力效率高

  •  
  •   niubee1 · 2021-08-26 12:13:12 +08:00 · 9004 次点击
    这是一个创建于 946 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近搞了几个 App,因为要跨平台就用了 Flutter,但是服务端语言还是用 Java 啊,PHP 啊,Python 啊,NodeJS 啊这些开发的话,每次切换的时候大脑都会宕机一段时间,所以一咬牙干脆用 Dart 直接写服务端,结果感觉还不错,AOT 编译后执行效率大约等于 Golang,开发的时候写起来和 Python 一样快,部署也跟 Go 一样方便,编译完了直接丢服务器上就能跑,并且由于和 Flutter 共用了语言,输入输出的模型类,大部分的 utilities 公共代码都可以共用。加起来减少了 1/3 的工作量。
    70 条回复    2022-03-01 20:35:05 +08:00
    AoEiuV020
        1
    AoEiuV020  
       2021-08-26 12:23:23 +08:00   ❤️ 2
    平时有没遇到缺轮子的情况,小众语言就怕这个,啥都要自己写就很烦了,
    rophie123
        2
    rophie123  
       2021-08-26 12:31:09 +08:00
    同感,但之前用了一次 uniapp 云开发,serverless,后端都省了
    niubee1
        3
    niubee1  
    OP
       2021-08-26 12:32:34 +08:00
    撸轮子也是一种乐趣,Dart 撸轮子也蛮方便的,比如 Orm 什么的都是自己撸的,业务模型和验证规则的类生成器就没用 Dart 了,直接用 Python 撸的,用 yaml 定义好模型, 能直接生成模型的代码,连关系图都可以生成,打印出来先在模型层面讨论好了再动手,返工率就低很多,也节约了很多的时间
    find456789
        4
    find456789  
       2021-08-26 12:33:30 +08:00
    Flutter 在 ios 上成熟度如何了
    niubee1
        5
    niubee1  
    OP
       2021-08-26 12:35:02 +08:00
    @find456789 还行,没遇到啥大坑
    missdeer
        6
    missdeer  
       2021-08-26 12:46:33 +08:00
    同感,所以我用 C++(逃
    hronro
        7
    hronro  
       2021-08-26 12:47:52 +08:00 via iPhone   ❤️ 4
    Dart 开 AOT 只是冷启动快,实际代码运行速度是比不过 JIT 的。所以客户端可以开 AOT,服务端还是算了吧
    debuggerx
        8
    debuggerx  
       2021-08-26 12:55:44 +08:00
    比较赞同,唯一的问题是一直写同一种语言时间长了容易腻。
    而且不是所有语言都适合这样玩的,能同时在多端开发都能保持良好体验的语言还是不多见的,唯二的选择可能也就 dart 和 ts 了吧
    nicevar
        9
    nicevar  
       2021-08-26 12:58:23 +08:00
    有时候你觉得好用是还没到踩坑的时候,服务端稍微复杂点还不如用其他的,个人的项目十几年来 Java 、Python 、Go 都用过,最终选择了 PHP,对我来说效率就不在一个档次上,PHP 这种可以在服务器上搭两套,只接用 code-server 来开发,调试也方便,而且 PHP 也不用怎么学,我之前一行 PHP 代码没写过,找了个框架直接上,然后做了一套后台,现在用了好几年了。
    mxT52CRuqR6o5
        10
    mxT52CRuqR6o5  
       2021-08-26 13:03:31 +08:00 via Android
    @debuggerx java 啊,同时写服务端和安卓
    debuggerx
        11
    debuggerx  
       2021-08-26 13:06:30 +08:00
    @mxT52CRuqR6o5 这里讨论的当然是包括 iOS 的……而且 java,光是让我写一端代码就腻得够够的了,写多端怕是要疯。。
    icyalala
        12
    icyalala  
       2021-08-26 13:28:38 +08:00   ❤️ 4
    从这点上来说,还是用 JS 更省时省力效率高,毕竟 "Any application that can be written in JavaScript, will eventually be written in JavaScript."
    musi
        13
    musi  
       2021-08-26 13:39:10 +08:00
    所以我选择 js
    ytll21
        14
    ytll21  
       2021-08-26 13:40:53 +08:00
    小项目可以,但是项目一大,就要考虑到协同成本以及每个成员的开发水平。当然,涉及到全栈的项目,一般也不会太大。
    skye
        15
    skye  
       2021-08-26 13:42:29 +08:00
    按照楼主这个思路:nodejs + 小程序 + weex 也不错呀
    darknoll
        16
    darknoll  
       2021-08-26 13:55:29 +08:00
    就是太小众了
    ebingtel
        17
    ebingtel  
       2021-08-26 14:01:13 +08:00
    哈哈 看标题还以为着了个前(后)端,共同开发……
    abcbuzhiming
        18
    abcbuzhiming  
       2021-08-26 14:01:47 +08:00
    自己一个人的时候可以这么干,人稍微多一点这就很成问题
    JohnLou
        19
    JohnLou  
       2021-08-26 14:04:15 +08:00
    能用 js 的我全部用 js,eletron 、react-native 、express 一把梭。
    wuhanchu
        20
    wuhanchu  
       2021-08-26 14:13:47 +08:00
    如果你就是一个团队,倒是无所谓。
    beginor
        21
    beginor  
       2021-08-26 14:17:39 +08:00 via Android   ❤️ 6
    C#适合你, 浏览器有 Blazor,桌面端和移动端有 MAUI,服务端有 Asp.Net Mvc Core
    tsanie
        22
    tsanie  
       2021-08-26 14:34:11 +08:00
    @beginor 游戏还有 unity3d 是不 /doge
    dany813
        23
    dany813  
       2021-08-26 14:37:50 +08:00
    js 统一世界
    murmur
        24
    murmur  
       2021-08-26 14:44:00 +08:00
    flutter 生不逢时,大厂有大把的 native 程序员,小厂都在做小程序等大厂收购
    Leviathann
        25
    Leviathann  
       2021-08-26 15:45:55 +08:00 via iPhone
    ts 还能共享一套类型
    想想就很爽
    xz410236056
        26
    xz410236056  
       2021-08-26 16:35:59 +08:00
    “最近搞了几个 App,因为要跨平台就用了 Flutter” flutter 就不用多套 UI 了? 多端一套 UI ?
    THESDZ
        27
    THESDZ  
       2021-08-26 16:38:21 +08:00
    另外一种想法是,脱离语言,定义要做的事情本身
    比如现在 swagger(open-api):支持生成客户端 sdk
    namelosw
        28
    namelosw  
       2021-08-26 16:57:55 +08:00   ❤️ 2
    必须的,不然一个需求还要协调几个团队,想想就头疼。

    很多时候多客户端多团队,看起来干活热火朝天的,有时候回头一想,掐指一算其实搞了半天没实现多少东西,都浪费在沟通上了。
    zoharSoul
        29
    zoharSoul  
       2021-08-26 17:14:15 +08:00
    内存占用比起来 golang 咋样?
    janxin
        30
    janxin  
       2021-08-26 17:17:27 +08:00
    什么?全栈开发不是全用 JavaScript 吗?
    debuggerx
        31
    debuggerx  
       2021-08-26 17:24:16 +08:00 via Android
    @xz410236056 不然呢,要写多套为啥还用 Flutter
    hongweiliuruige
        32
    hongweiliuruige  
       2021-08-26 17:34:39 +08:00
    ts 一把梭,,nestjs + typeorm + mongodb + react + react-native + electron + uniapp + 嵌入式 + 鸿蒙原生 app
    ALVC666
        33
    ALVC666  
       2021-08-26 17:36:10 +08:00
    TS 造起来
    otakustay
        34
    otakustay  
       2021-08-26 17:41:38 +08:00
    也就低并发能这么玩,QPS 上去以后小众语言和框架很难从社区汲取相关实践,出问题就懵
    Lucups
        35
    Lucups  
       2021-08-26 17:44:58 +08:00
    @namelosw yep.

    我的看法是,沟通至少占用了 60% 的研发成本。
    lancelock
        36
    lancelock  
       2021-08-26 17:54:10 +08:00
    dart 写后端有现成的框架之类的吗?还是你自己撸的?
    niubee1
        37
    niubee1  
    OP
       2021-08-26 17:58:51 +08:00
    @lancelock 有很薄的小框架,看了看代码没啥问题就直接用了,顺手的小玩意儿组装起来后可以按照自己的口味组合,大量的脚手架,生成器都是自己撸的,搞起来也蛮快的,包括数据库的 migration 这些都是自己撸的。
    seakingii
        38
    seakingii  
       2021-08-26 18:05:54 +08:00
    js,dart,c# 目前都能实现这样的需求
    wengjin456123
        39
    wengjin456123  
       2021-08-26 18:08:21 +08:00 via Android
    那 js 不是更好
    shanghai1998
        40
    shanghai1998  
       2021-08-26 18:17:29 +08:00
    碉堡了 dart 写后端
    oxogenesis
        41
    oxogenesis  
       2021-08-27 07:53:44 +08:00
    那 js 不是更好
    服务器、客户端、app 全部都是,我就是这么干的
    wangyzj
        42
    wangyzj  
       2021-08-27 09:05:34 +08:00
    所以闲鱼的那些 flutter 问题解决了吗
    jojobo
        43
    jojobo  
       2021-08-27 09:14:11 +08:00
    产品上线了吗,想体验一下
    weichengwu
        44
    weichengwu  
       2021-08-27 09:19:19 +08:00
    我当初也选了 flutter 客户端+web + dart 后端,结果 fish-redux 不维护了、aqueduct 不维护了。。。
    xz410236056
        45
    xz410236056  
       2021-08-27 09:34:06 +08:00
    @debuggerx 问题就是 iOS 和安卓 设计风格不同啊,哪个 app 用一套 UI ?
    loolac
        46
    loolac  
       2021-08-27 09:51:55 +08:00
    @hronro AOT 编译后就是原生代码了,怎么会比不过 JIT 。
    icyalala
        47
    icyalala  
       2021-08-27 09:59:21 +08:00
    @loolac 好的 JIT 可以做 FDO/PGO,AOT 除非你自己做 PGO,但还是可能有差距。
    mxT52CRuqR6o5
        48
    mxT52CRuqR6o5  
       2021-08-27 10:10:33 +08:00 via Android
    @loolac https://www.zhihu.com/answer/131343894
    找到篇文章,反正是说是一定条件下 jit 可以做到更好
    Actrace
        49
    Actrace  
       2021-08-27 10:12:14 +08:00
    一个人就是一支军队!
    niubee1
        50
    niubee1  
    OP
       2021-08-27 10:45:35 +08:00
    @mxT52CRuqR6o5 一定条件的话,根据二八原则,大多数时候都是 AOT 更优那肯定选 AOT 了,毕竟不可能为了那一小撮条件做选择啊,且上 JIT 的最大动力是要用 dart:mirrors 但是,老实说用了这就憋说性能了。
    niuroumian
        51
    niuroumian  
       2021-08-27 10:46:53 +08:00
    @niubee1 dart 数据库 driver 用的什么啊?
    loolac
        52
    loolac  
       2021-08-27 11:48:48 +08:00
    @icyalala
    @mxT52CRuqR6o5 文章看了一下,JIT 确实优秀啊,因为以前也看过 luajit 的分析,因为涉及一些数值计算的代码执行效率超过了 C/C++以及某些汇编语言,所以感觉 jit 确实很牛,但是 JIT 的这种优秀是和硬件剩余性能有关的,也只能在特定条件和环境中。如果不了解原理,很难写出针对 jit 优化的代码。
    niubee1
        53
    niubee1  
    OP
       2021-08-27 11:53:25 +08:00
    关于 JIT,必须要注意的是,要讨论的是谁的 JIT,Java 的,GO 的,.NET 的还是 Dart 的,不同的 VM 实现上是有区别的,脱离环境讨论优劣意义不大。
    debuggerx
        54
    debuggerx  
       2021-08-27 13:12:00 +08:00
    @xz410236056 有些 app 确实双端风格不统一,但那往往并不是产品设计的需求,而是先有了双端独立开发的因,使用了各自系统组件,才有了风格不同的果,而不是产品设计那边分别给了安卓和 iOS 两套设计 UI 。
    再进一步,到了一定规模体量的公司,甚至会有自己特有的设计风格,脱离官方的 material design 和 iOS design language,比如微信的 WeUI,蚂蚁的 AntD,京东的 NutUI,都不会说为两个平台设计不一样的组件样式,多数情况下产品追求的还是一致性,而不是各具特色。做过原生 App 开发就会知道,当产品是以另一个平台的风格样式给的 UI 设计,还原 UI 图的时候就非常非常蛋疼了,要么就是去跟产品说,这个东西在我们安卓 /iOS 很难做 /实现不了,要么就是找开源组件,要么是自己爆肝硬撸……所以你可以在 GitHub 上找到很多仿 iOS 风格的安卓组件,同样也有很多仿安卓风格的 iOS 组件
    wangxin13g
        55
    wangxin13g  
       2021-08-27 13:47:31 +08:00   ❤️ 1
    自己的项目并发低随便你怎么玩。
    公司稍微大点,要你接个 ES MQ 监控 日志这些,写轮子能写到你吐。
    xz410236056
        56
    xz410236056  
       2021-08-27 14:03:53 +08:00
    @debuggerx 你去找个安卓和 iOS 设备看看支付宝、微信 他们 UI 风格一样吗。“都不会说为两个平台设计不一样的组件样式”风格不一样,不代表这个地方图标、按钮 不一样。现在的设计还是要遵循平台设计风格的
    pecopeco
        57
    pecopeco  
       2021-08-27 14:06:28 +08:00
    @skye 别提 weex 了,几年前被阿里抛弃扔给 Apache 维护,现在 Apache 不知道因为什么又把这块烫手山芋扔了回来,前面被 rn 一直压制,现在又被 flutter 抢占市场,这么被抛来抛去,未来。。
    skye
        58
    skye  
       2021-08-27 14:15:59 +08:00
    @pecopeco 哈哈哈哈哈哈,就是一个笑话。
    jk0001688
        59
    jk0001688  
       2021-08-27 18:00:01 +08:00
    js 一把梭 react rn +nestjs
    secondwtq
        60
    secondwtq  
       2021-08-27 19:32:10 +08:00
    这问题本来就不存在 ... 但是现在平台喜欢我即世界,喜欢钦定开发语言,才搞出这么多幺蛾子。
    这一波的始作俑者应该算在 Web 头上,JavaScript 限得死死的,直到 WebAssembly 才有点起色。
    但是其他人脸上也不怎么好看就是了,Apple 以前还有心搞兼容,现在好像没啥兴趣都给自家标准让路了。UNIX 和 C 本来就是双生子。Web 造成的遗毒,本来也不是 Web 的错,要不是各家平台这么乱,第三方又怎么会选择 Web 呢。

    倒是 Windows 很有意思,官方策略就是多语言共存,VS 至今都为罗(B)马(A)尼(S)亚(I)语(C)留着一份。(另外微软的 PL Research 也很出彩)当然代价就是随机用三个拉丁字母组合,就有相当的概率 hit 到一个微软的开发框架 :)
    cjh1095358798
        61
    cjh1095358798  
       2021-08-28 11:35:50 +08:00
    所以为啥用 flutter, 用 js 不好吗
    enlight
        62
    enlight  
       2021-08-29 09:35:37 +08:00
    @cjh1095358798 赞同,App 直接用 React Native,网站 React,后端 Nest.js ,桌面 Electron,爽歪歪。Dart 缺的库太多了
    fakeshadow
        63
    fakeshadow  
       2021-08-29 14:27:53 +08:00
    你这么干感觉是 js 全栈的低配版
    Dganzh
        64
    Dganzh  
       2021-08-29 14:50:59 +08:00
    想问问 dart 有啥后端框架
    neoblackcap
        65
    neoblackcap  
       2021-08-29 15:15:14 +08:00
    @missdeer C++写跨平台问题不大,很多大公司都是这样干的,共用的逻辑用平台无关的 C++写。UI 用对应的平台 API 重新实现一个
    mxT52CRuqR6o5
        66
    mxT52CRuqR6o5  
       2021-11-23 18:25:07 +08:00
    @loolac
    如果是 dart 的话,dart 官方是这么说的
    https://dart.dev/faq#q-which-is-faster--aot--or-jit-compiled-code
    JIT-compiled code is slower at startup, but it can have better peak performance after it runs long enough for runtime optimizations to be applied.
    https://github.com/dart-lang/sdk/issues/39367
    github issue 拿泛型举例说明 AOT 慢的 case (难道这就是 golang 之前不愿意做泛型的原因?)
    loolac
        67
    loolac  
       2021-11-24 00:23:33 +08:00
    @mxT52CRuqR6o5 这样看上去,Dart 的 aot 都不如 java 。泛型应该不是问题,没做过泛型相关的。但是泛型应该在编译时都处理为具体的类型了。对性能影响应该不会很大。
    niubee1
        68
    niubee1  
    OP
       2021-11-24 09:28:43 +08:00
    @loolac 但是实测 AOT 并不比 Java 慢,也许是我的用例太窄,没有覆盖到恰好性能瓶颈的地方
    mxT52CRuqR6o5
        69
    mxT52CRuqR6o5  
       2022-03-01 19:09:54 +08:00
    @niubee1
    @loolac
    我想到一个极端的例子,比如 JS ,强行去做 AOT 性能一定是没有 JIT 好的,动态性越强的语言越需要 JIT ,像.net 的 AOT 也是很难产
    dart 自述说 JIT 更快我猜是可能是和 dartvm 设计有关,dart 是可以编译成的高效 js 的(编译结果不会有太多抽象层),dartvm 为了实现这个目的设计应该是很贴合 js
    mxT52CRuqR6o5
        70
    mxT52CRuqR6o5  
       2022-03-01 20:35:05 +08:00
    @niubee1
    我这边发现字节开源的 modern.js 框架可以比共栈开发更进一步,直接在前端代码中 import 后端的函数,调用时能自动转换成 HTTP 请求
    https://modernjs.dev/docs/guides/features/server-side/bff/function
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2641 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 15:22 · PVG 23:22 · LAX 08:22 · JFK 11:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.