V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
opentrade
V2EX  ›  程序员

Rust 桌面程序选 Flutter 还是 Tauri?

  •  7
     
  •   opentrade · 2022-05-16 14:06:44 +08:00 · 20251 次点击
    这是一个创建于 951 天前的主题,其中的信息可能已经有所发展或是发生改变。

    近期我们开源了 RustDesk 服务端以及移动端源代码,目前正计划将原来 Sciter 桌面端迁移到新的 UI 框架,有点在 Fluter 与 Tauri 之前犹豫,我个人比较倾向于 Tauri ,刚刚发起一个问卷调查,有兴趣可以参入一下,非常感谢。

    https://github.com/rustdesk/rustdesk/discussions/533

    第 1 条附言  ·  2022-05-18 13:13:21 +08:00
    补充一项为这个迁移项目做的招聘
    https://www.v2ex.com/t/853682
    139 条回复    2023-07-27 16:54:05 +08:00
    1  2  
    angrylid
        1
    angrylid  
       2022-05-16 14:14:40 +08:00 via Android
    这两个都是很激进的方案,未见的就比 Sciter 更靠谱吧。
    opentrade
        2
    opentrade  
    OP
       2022-05-16 14:23:54 +08:00
    @angrylid 你用过 Sciter 吗? Sciter 用的越久越讨厌
    opentrade
        3
    opentrade  
    OP
       2022-05-16 14:24:43 +08:00
    @angrylid 的确有点激进
    ruanimal
        4
    ruanimal  
       2022-05-16 14:25:02 +08:00
    @opentrade 什么类型的问题呢
    HiCode
        5
    HiCode  
       2022-05-16 14:28:13 +08:00
    同样想知道 Sciter 有什么问题!
    ysc3839
        6
    ysc3839  
       2022-05-16 14:34:23 +08:00 via Android
    个人更喜欢 React Native 等基于平台提供的 UI 库的框架,当然这么做会降低灵活性、通用性等等。
    如果一定要选一个自己绘制界面的方案,那还是 Flutter 吧,个人感觉资源占用啥的都比浏览器低。
    opentrade
        7
    opentrade  
    OP
       2022-05-16 14:38:30 +08:00   ❤️ 2
    我一直使用的 Sciter tis 版本,
    - bug 太多,虽然作者比较 nice ,但是耐不住问的人太多
    - 兼容性不好,很多 Windows update 下跑不起来(其它框架也许同样有这个问题吧)
    - 每次发布新版本,永远都会引入不少新的破坏性 bug ,搞的自己去找 work around ,要是等作者修复,得等好久。比如 Linux 下垂直滚动条不出现的 bug ,去年 12 月份更新引入的( tis 版本),一直催作者(我是付费用户),可是没得到处理
    - Linux 下不支持 IME
    dbskcnc
        8
    dbskcnc  
       2022-05-16 14:44:24 +08:00   ❤️ 1
    显然 flutter 啊, 可以和 mobile 统一代码
    weixiangzhe
        9
    weixiangzhe  
       2022-05-16 15:03:30 +08:00
    不支持 IME 就是输入法不能用吗? 那确实不太行哦
    zengxs
        10
    zengxs  
       2022-05-16 15:05:01 +08:00   ❤️ 1
    Tauri 功能缺失很多,可以看这个 https://github.com/tauri-apps/tauri/issues/544#issuecomment-607717471

    而且 Tauri 对接原生代码比较麻烦,这方面 Flutter 好很多

    Flutter 成熟度相对较高,Tauri 可以说很不成熟
    不过感觉最好的解决方案还是 原生开发 + WebView 做核心 UI
    divasatanica
        11
    divasatanica  
       2022-05-16 15:06:08 +08:00
    4 年前用过 sciter 写 windows 桌面端程序,特别难用。很不好的开发体验

    不过作者基本对提问都会回答,就是要等时差
    suyulingxm
        12
    suyulingxm  
       2022-05-16 15:34:09 +08:00
    都不建议采用,直接上 electron
    sunwei0325
        13
    sunwei0325  
       2022-05-16 15:34:41 +08:00
    投 flutter 一票, 从此 flutter + rust 除了 appflowy 又多一个学习案例啦
    StarainX
        14
    StarainX  
       2022-05-16 15:38:49 +08:00
    Flutter
    Goooler
        15
    Goooler  
       2022-05-16 15:39:30 +08:00
    等 compose
    opentrade
        16
    opentrade  
    OP
       2022-05-16 16:16:01 +08:00
    很高兴得到 flutter_rust_bridge 作者的回复,受益匪浅。我也去 Tauri 群里发个帖子,问问,https://github.com/tauri-apps/tauri/discussions/4137
    angrylid
        17
    angrylid  
       2022-05-16 16:28:58 +08:00 via Android
    @opentrade 只是从用户的立场出发,我都没用过基于 Flutter Desktop 或 Tauri 的比较成熟的产品。考虑下 Election 或者 Qt + CEF 吗?
    opentrade
        18
    opentrade  
    OP
       2022-05-16 16:32:13 +08:00   ❤️ 1
    @angrylid 我稍微还是比较激进的,跟着时代走
    opentrade
        19
    opentrade  
    OP
       2022-05-16 16:33:28 +08:00
    @angrylid 另外一个角度也是为了促进开源社区良性发展,不能按照闭源的思维做事情。
    jpacg
        20
    jpacg  
       2022-05-16 16:34:05 +08:00
    Flutter
    encro
        21
    encro  
       2022-05-16 16:39:12 +08:00
    b 站有个哥们用 web wasm+tauri 实现 webcam ,感觉 webcam 和 remote desktop 还真有点像。
    zengxs
        22
    zengxs  
       2022-05-16 16:43:44 +08:00
    opentrade
        23
    opentrade  
    OP
       2022-05-16 16:44:44 +08:00
    @zengxs 这个我倒是用不到
    zengxs
        24
    zengxs  
       2022-05-16 16:47:23 +08:00
    @opentrade 哈哈,用不到 WebView 的话倒是可以尝试一下 Flutter
    我最近也是刚好在调研跨平台桌面框架,反正就是感觉每个跨平台 GUI 框架都是一堆坑
    opentrade
        25
    opentrade  
    OP
       2022-05-16 16:53:32 +08:00
    @zengxs 肯定都有坑,自己写的东西何尝不是一堆坑,就看谁更成熟点。
    yuuko
        26
    yuuko  
       2022-05-16 17:38:39 +08:00
    投 Tauri 一票,在现在硬件性能越来越强的现在,web 真的是未来
    opentrade
        27
    opentrade  
    OP
       2022-05-16 17:42:33 +08:00
    @zengxs 这个功能缺失列表,好像现在很多都已经补齐了
    Buges
        28
    Buges  
       2022-05-16 17:56:19 +08:00 via Android
    投 Tauri 一票,只要你们前端的兼容性做到普通网页的程度(可以在不同版本的现代浏览器中正常加载),那就没有什么 webview 不同导致的 bug 可担心的。
    flutter 始终都是移动端优先,做出来的应用体验如同在使用 Android 模拟器,桌面体验较差,成熟度比传统 Web 技术差远了。
    @zengxs Tauri 就是原生开发+Webview 做核心 UI 啊,只不过帮你包了一层 API 方便使用而已。
    Buges
        29
    Buges  
       2022-05-16 17:59:39 +08:00 via Android
    你可以看上面发的那个 tauri 和 electron 功能对比,很多都是桌面集成特性,就是让你 js 端直接调用系统原生的功能,这些其实都是可以没必要的,前端只做 UI 就可以了,应用内需要什么平台原生的功能用 rust 自己封装出接口,实现上更简单,只是对 js 开发者来说可能没那么方便罢了。
    opentrade
        30
    opentrade  
    OP
       2022-05-16 18:09:50 +08:00 via Android
    @Buges 是的,其实这些我都不需要,我们现在都是自己封装的
    opentrade
        31
    opentrade  
    OP
       2022-05-16 18:10:41 +08:00 via Android
    @Buges 体验真的是这样吗?风格可以自己调,应该不是大的问题吧
    zengxs
        32
    zengxs  
       2022-05-16 18:17:35 +08:00
    @Buges Tauri 的缺点是只提供了一个 webview ,让你想要稍微原生一点的功能都很麻烦
    opentrade
        33
    opentrade  
    OP
       2022-05-16 18:30:06 +08:00 via Android
    @zengxs 带着镣铐跳舞,flutter 应该也差不多
    Buges
        34
    Buges  
       2022-05-16 18:36:33 +08:00 via Android   ❤️ 2
    @opentrade @zengxs
    tauri 就是封装了系统 webview 的 API ,在上面提供了一些工具链(构建、打包、自动更新等)和类 electron 方便开发的 js 调用系统原生功能的 API ,不用这些就和自己调用 webview 没啥区别。所谓不成熟也只是指这部分不成熟,webview 哪有不成熟之说,webview 最大的坑就是各平台版本和实现不统一导致的不一致性。然而 Web 早就是成熟广泛的标准了,只要把网站兼容性的标准向正常网页(适配各种浏览器)看齐,那就不用担心不一致性的问题。

    反观 flutter 自己渲染,这其中坑才多着呢,冷门平台上输入法、光标、accessibility 和各种犄角旮旯的东西总有你想不到的地方。
    iwdmb
        35
    iwdmb  
       2022-05-16 18:39:49 +08:00
    Flutter+1
    lodisy
        36
    lodisy  
       2022-05-16 18:41:32 +08:00 via Android   ❤️ 1
    Flutter

    另外 dart + rust 的还一个 isar 数据库
    meetcw
        37
    meetcw  
       2022-05-16 18:43:19 +08:00
    上个月用过 flutter desktop 2.x 开发了个小玩具,总的来说 flutter desktop 系统相关的 api 全靠插件(比如调整窗口大小,获取剪切板,播放声音,托盘等),插件质量良莠不齐。现在 3.0 还没看,不知道有什么改进。

    Tauri 我只过了一遍文档,感觉对桌面的基本支持要比 flutter desktop 好。

    总的来说目前的话我会选择使用 tauri ,长远的来说我更看好背靠大树的 flutter 。
    MakHoCheung
        38
    MakHoCheung  
       2022-05-16 18:44:33 +08:00
    MAUI 或者 Compose /滑稽
    janxin
        39
    janxin  
       2022-05-16 18:56:58 +08:00   ❤️ 1
    Flutter 的功能支持很多是靠插件支持的,自然不如核心 UI 功能来的支持更好。实在没有的还得动手写插件。不过长远来看生态完善速度还是 OK 的,从之前的情况看,感觉半年基本常用功能覆盖问题不大(小众功能纯看脸...

    Tauri 应该跟你现在的方案过渡起来比较容易?

    不过我是用 Flutter 的 :)
    opentrade
        40
    opentrade  
    OP
       2022-05-16 19:09:26 +08:00 via Android
    @janxin 的确过度容易,我们就是 html js 那套
    opentrade
        41
    opentrade  
    OP
       2022-05-16 19:10:12 +08:00 via Android
    @janxin 但是我们的移动端是 flutter ,所以选两者对我们都各有利弊
    opentrade
        42
    opentrade  
    OP
       2022-05-16 19:11:11 +08:00 via Android
    @meetcw 是不是没装 chrome 的 win7 需要安装 edge?
    zengxs
        43
    zengxs  
       2022-05-16 19:14:06 +08:00
    @Buges #34 是的,webview 确实是很好的 UI 平台,但是 tauri 提供的原生功能太少了,目前还是只能看成一个加强版的 pwa
    Flutter 的坑部分,基本认同

    @opentrade #40 如果之前就是 html 写的,那无脑上 tauri 就行了,原来的代码基本上可以重用,如果选 flutter 就要全部从头开始写
    xieren58
        44
    xieren58  
       2022-05-16 19:46:23 +08:00
    https://rustcc.cn/article?id=9e10386b-6ad0-450a-82d6-d5154aed6d3e 这个帖子可以参考.

    《我们是一家互联网金融公司(非区块链)。

    从 2021 年 10 月,在尝试 Flutter 跨平台开发效果不佳后,开始仿照 1Password 的成功经验,试水 rust 做应用核心模块开发。目前,基本走通模式。

    半年多的时间,从 0 到 3 个全职 rust 开发工程师,核心模块两万行代码,外加各种 Bindings 涵盖 electron(based on neon), browser(based on wasm-bindgen), android/ios(based on mozilla/uniffi),terminal(based on tui),和两个 SDK (py/cxx),提供从 Low Level 的 HTTP/WS Clients 到 High Level 的 ViewModel ,再到各个平台的代码集成。》
    dcsuibian
        45
    dcsuibian  
       2022-05-16 19:58:26 +08:00
    还是比较看好 Flutter
    opentrade
        46
    opentrade  
    OP
       2022-05-16 20:03:52 +08:00 via Android
    @xieren58 最后的选择是?
    PTLin
        47
    PTLin  
       2022-05-16 20:05:04 +08:00
    正好这两天对这个项目感兴趣在看源码中,正好作者换技术栈我能更好的学习一下 gui 方面了。
    我还是有个疑问,虽然 Rust 里 GTK 和 Qt 用起来比较半吊子和蹩脚,但是为什么不采用这些技术实现桌面端呢?
    hawei
        48
    hawei  
       2022-05-16 20:06:39 +08:00
    Flutter 吧。
    xieren58
        49
    xieren58  
       2022-05-16 20:07:08 +08:00
    @opentrade 你可以问问他们, 我不是在那个公司.
    Cooky
        50
    Cooky  
       2022-05-16 20:13:10 +08:00
    歪个楼,拿 godot 来当 gui 也行(
    opentrade
        51
    opentrade  
    OP
       2022-05-16 20:14:55 +08:00
    @PTLin 人嘛,要向前看
    opentrade
        52
    opentrade  
    OP
       2022-05-16 20:15:24 +08:00
    @PTLin 难道你想啃那些老东西?
    PTLin
        53
    PTLin  
       2022-05-16 20:19:02 +08:00
    @opentrade 我其实也感觉那些技术有点过时了,附带一提 1password 应该是用的 Electron 做的 gui ,他们的 GitHub 上有 electron rust 的一个 crate ,而且软件包里也能看出来。
    opentrade
        54
    opentrade  
    OP
       2022-05-16 20:23:27 +08:00
    Reddit 上有个非常好的回答

    Having tried both (and Dioxus too), Tauri seems to me a better choice.

    The release candidate they released is pretty solid, tooling is great (create-tauri-app), communication between frontend and backend is very simple (it's just a macro, it supports async, and everything that implements seeds::(De)Serialize can be sent/received), etc.

    Also, since it uses web technologies, you get all the existing ecosystem, which is huge. It's unbeatable.

    Flutter is great for mobile apps. For desktop, there's still a lot missing. Performance is also very poor (honestly wasn't expecting that, might have something to do with my hardware thought).
    lijy91
        55
    lijy91  
       2022-05-16 20:24:44 +08:00
    @meetcw 我猜可能用了 leanflutter 的 window_manager 和 tray_manager
    opentrade
        56
    opentrade  
    OP
       2022-05-16 20:42:21 +08:00
    @xieren58 公司网站一直加载,看来他们的选型不值得参考。
    FrankHB
        57
    FrankHB  
       2022-05-16 22:23:06 +08:00
    我没法给出可靠的具体建议,不过需要指出,光是想搞清楚什么算是“前”,对 GUI 开发者来讲都经常算是不切实际的奢望。从现状看,“过时”在这个领域中不应该是需要被优先考虑的缺陷(否则很容易发现新的都是一出生就更过时的)。
    cf. https://v2ex.com/t/852363#r_11667402
    KaoN
        58
    KaoN  
       2022-05-16 22:57:24 +08:00 via Android   ❤️ 1
    wangyzj
        59
    wangyzj  
       2022-05-16 22:59:23 +08:00
    顺便问问闲鱼 flutter 现在咋样了?
    opentrade
        60
    opentrade  
    OP
       2022-05-16 23:09:35 +08:00 via Android
    @FrankHB 因人而异,我个人偏向与迎接新事物
    YARU
        61
    YARU  
       2022-05-17 00:08:53 +08:00
    @opentrade 用 Chrome 能开(还挺炫酷) Firefox 就一直加载
    WebKit
        62
    WebKit  
       2022-05-17 00:09:08 +08:00 via Android
    推荐 flutter 刚发布了新的 flutter 3 性能更好。
    opentrade
        63
    opentrade  
    OP
       2022-05-17 00:24:15 +08:00
    @YARU 没办法,Flutter 肯定优先 Chrome 。
    zyxk
        64
    zyxk  
       2022-05-17 01:33:13 +08:00
    @opentrade sciter.js 用起来还不错啊, 我提过几个 bug, 作者也修的挺快
    Immortal
        65
    Immortal  
       2022-05-17 01:43:56 +08:00
    没有考虑过 druid 吗
    opentrade
        66
    opentrade  
    OP
       2022-05-17 01:47:47 +08:00
    @zyxk 痛苦在后面
    opentrade
        67
    opentrade  
    OP
       2022-05-17 01:55:19 +08:00
    @zyxk 作者人的确挺好,可惜去年发起募捐的行动失败,没有把开源社区搭建起来。如果他再年轻一些,Sciter 很有希望成为 Flutter / Tauri 之后的第三股力量。感觉 Sciter 项目主要就是靠他一个人在支撑,做的非常辛苦。
    opentrade
        68
    opentrade  
    OP
       2022-05-17 01:56:28 +08:00
    @zyxk 作为上游使用者快两年,我看着都着急。
    wdhwg001
        69
    wdhwg001  
       2022-05-17 02:06:06 +08:00
    我实际上更推荐 druid/iced ,因为你们是 RustDesk ,既然自豪地标榜自己是 Rust 系,那么理应就像其他 Rust 系桌面应用一样打心底里是排斥 Web 方案,并且也排斥带 GC 语言的方案的。

    而且说实话,不依赖网页端可以让一个远控软件做到更深度的集成,比如拖拽、融合模式一类的,也可以有更好的硬件加速。
    dzhou121
        70
    dzhou121  
       2022-05-17 02:18:14 +08:00 via iPhone
    Druid 挺好用的,自创控件功能特别强大
    Alan1978
        71
    Alan1978  
       2022-05-17 07:15:47 +08:00 via Android
    不要折腾这些 要不然过两年你又回来问了 一步到位 electron
    chenyu0532
        72
    chenyu0532  
       2022-05-17 07:31:16 +08:00
    正在用 electron 做自己的一个桌面小应用,不是特别的熟悉其他的。
    就想问下,一直说 electron 性能差(抛开 vscode),差在设么地方。我个人感觉还可以。。
    supermoonie
        73
    supermoonie  
       2022-05-17 07:41:43 +08:00 via iPhone
    还在用 swing 开发跨平台的,轻轻飘过
    encro
        74
    encro  
       2022-05-17 08:41:01 +08:00
    @wdhwg001

    其实最习惯的就是 iced 。。。就是 vue 嘛。

    还有 egui 也不错,无状态,省事。
    encro
        75
    encro  
       2022-05-17 08:42:27 +08:00   ❤️ 1
    @KaoN

    据说 slint 这个就是 qml 团队出品,性能高,省内存,可用于嵌入式。
    missdeer
        76
    missdeer  
       2022-05-17 09:05:53 +08:00
    @encro 语法真像
    lizhenda
        77
    lizhenda  
       2022-05-17 09:14:23 +08:00
    如果不需要控制窗口或者涉及一些原生平台的窗口特效,那么 Tauri 还是可以试试的。否则商业产品还是建议用 Electron
    lizhenda
        78
    lizhenda  
       2022-05-17 09:18:06 +08:00
    @chenyu0532 Web 网站写的都卡卡的项目在 Electron 自然也卡咯。主要是水平问题。还有就是真正的细节狂确实能一眼看出客户端是套壳浏览器的(典型的拖拽左右两边窗口时会有黑底出现,其实就是浏览器的 view 跟不上原生窗口的 view )
    tanranran
        79
    tanranran  
       2022-05-17 09:20:25 +08:00
    长远看,flutter 从语法和 UI 方面吊打任何平台
    lysS
        80
    lysS  
       2022-05-17 09:43:13 +08:00
    插楼问一下,Sciter 和 flutter 如何绑定啊?
    lysS
        81
    lysS  
       2022-05-17 09:44:50 +08:00
    还有,flutter 桌面端才出来不久吧?能用了?
    ShadowPower
        82
    ShadowPower  
       2022-05-17 09:56:06 +08:00
    最近用 iced 做了个玩具,也挺好用,但有两个缺点:字体只能内嵌;最近更新之后内存占用从 40MB 增加到 200 多 MB 。
    pkwenda
        83
    pkwenda  
       2022-05-17 09:56:33 +08:00
    二选一,肯定是 Flutter
    orafy
        84
    orafy  
       2022-05-17 10:03:39 +08:00
    Flutter 也有很多坑额,吃显卡,客户端很多机器启动不起来。
    我们从 sciter 最终迁移到自己开发的基于 Direct2D 的原生渲染也遇到了很多坑,
    像 win7 的 DirectWrite 没装 platform update 设置不了字母间距,
    最后借鉴了 sciter 里面对 DirectWrite 布局的代码,
    然后就是抄 sciter 的 GDI 部分封装,兼容部分客户端。
    hahastudio
        85
    hahastudio  
       2022-05-17 10:10:07 +08:00
    桌面端的话,我觉得目前这两个真不如 electron
    话说你们桌面端是打算 Windows/macOS/Linux 还是只看重一个平台,如果是一个平台的话,原生还是最好的
    creanme
        86
    creanme  
       2022-05-17 10:27:20 +08:00
    感觉 slint 还挺有意思的
    THESDZ
        87
    THESDZ  
       2022-05-17 10:32:49 +08:00
    看了下谷歌搜索指数 Flutter>>Tauri

    不过你这是个 pc 端的,所以不清楚
    opentrade
        88
    opentrade  
    OP
       2022-05-17 10:43:06 +08:00
    睡一觉过来,tauri 就反超了 flutter ,国内外关注度不一样。
    https://github.com/rustdesk/rustdesk/discussions/533
    Manweill
        89
    Manweill  
       2022-05-17 11:17:10 +08:00
    案例一波 nodegui ,基于 QT5

    https://github.com/nodegui/nodegui
    shui14
        90
    shui14  
       2022-05-17 11:43:36 +08:00
    去年看到过一个方案,拉起本地 chrome ,走 chrome devtools protocol ,如果是内部桌面需求可以看看。https://github.com/Srinivasa314/alcro
    ViriF
        91
    ViriF  
       2022-05-17 12:05:02 +08:00
    https://www.warp.dev/blog/how-warp-works
    可以参考问问看 Warp 的方案?我是对他们提到的这个 WIP UI framework 很感兴趣,要是能看看实现就好了(口水)
    Fontaine
        92
    Fontaine  
       2022-05-17 12:16:03 +08:00
    最近在用 Flutter 3.0 ,尝试做 mac 的客户端,除了文档不完善,还得依赖很多插件,才能完成一些基础的客户端功能呀
    opentrade
        93
    opentrade  
    OP
       2022-05-17 12:34:05 +08:00
    opentrade
        94
    opentrade  
    OP
       2022-05-17 12:34:23 +08:00
    @opentrade 我们总是对 Google 期盼太高
    he1a2s0
        95
    he1a2s0  
       2022-05-17 12:37:37 +08:00
    有个收集 Rust GUI 方案的网站: https://www.areweguiyet.com/
    lufengd3
        96
    lufengd3  
       2022-05-17 15:18:48 +08:00
    用 Tarui 做过小 demo ,包大小方面对比 electron 确实优秀,潜在风险是 Webview 版本兼容问题,不要命,但会一直恶心人。

    最好调研下当前产品投放的的设备环境,OS 、webview 版本分布这些
    opentrade
        97
    opentrade  
    OP
       2022-05-17 15:27:58 +08:00
    @lufengd3 如果是老 Win7 会什么效果?
    1217950746
        98
    1217950746  
       2022-05-17 16:11:58 +08:00
    @opentrade 基于 WebView2 的,最低支持到 Windows7 需要单独安装
    opentrade
        99
    opentrade  
    OP
       2022-05-17 16:35:10 +08:00
    @1217950746 这个对我们来说简直是致命的
    xieren58
        100
    xieren58  
       2022-05-17 18:29:39 +08:00
    @opentrade 要翻墙.
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2385 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:51 · PVG 23:51 · LAX 07:51 · JFK 10:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.