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

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

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

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

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

    倒是 Windows 很有意思,官方策略就是多语言共存,VS 至今都为罗(B)马(A)尼(S)亚(I)语(C)留着一份。(另外微软的 PL Research 也很出彩)当然代价就是随机用三个拉丁字母组合,就有相当的概率 hit 到一个微软的开发框架 :)
    cjh1095358798
        61
    cjh1095358798   55 天前
    所以为啥用 flutter, 用 js 不好吗
    enlight
        62
    enlight   54 天前
    @cjh1095358798 赞同,App 直接用 React Native,网站 React,后端 Nest.js ,桌面 Electron,爽歪歪。Dart 缺的库太多了
    fakeshadow
        63
    fakeshadow   53 天前
    你这么干感觉是 js 全栈的低配版
    Dganzh
        64
    Dganzh   53 天前
    想问问 dart 有啥后端框架
    neoblackcap
        65
    neoblackcap   53 天前
    @missdeer C++写跨平台问题不大,很多大公司都是这样干的,共用的逻辑用平台无关的 C++写。UI 用对应的平台 API 重新实现一个
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2910 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 04:35 · PVG 12:35 · LAX 21:35 · JFK 00:35
    ♥ Do have faith in what you're doing.