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

Rust 桌面程序选 Flutter 还是 Tauri?

  •  7
     
  •   opentrade · 319 天前 · 13959 次点击
    这是一个创建于 319 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    反观 flutter 自己渲染,这其中坑才多着呢,冷门平台上输入法、光标、accessibility 和各种犄角旮旯的东西总有你想不到的地方。
    iwdmb
        35
    iwdmb  
       319 天前
    Flutter+1
    lodisy
        36
    lodisy  
       319 天前 via Android   ❤️ 1
    Flutter

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

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

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

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

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

    @opentrade #40 如果之前就是 html 写的,那无脑上 tauri 就行了,原来的代码基本上可以重用,如果选 flutter 就要全部从头开始写
    xieren58
        44
    xieren58  
       319 天前
    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  
       319 天前
    还是比较看好 Flutter
    opentrade
        46
    opentrade  
    OP
       319 天前 via Android
    @xieren58 最后的选择是?
    PTLin
        47
    PTLin  
       319 天前
    正好这两天对这个项目感兴趣在看源码中,正好作者换技术栈我能更好的学习一下 gui 方面了。
    我还是有个疑问,虽然 Rust 里 GTK 和 Qt 用起来比较半吊子和蹩脚,但是为什么不采用这些技术实现桌面端呢?
    hawei
        48
    hawei  
       319 天前
    Flutter 吧。
    xieren58
        49
    xieren58  
       319 天前
    @opentrade 你可以问问他们, 我不是在那个公司.
    Cooky
        50
    Cooky  
       319 天前
    歪个楼,拿 godot 来当 gui 也行(
    opentrade
        51
    opentrade  
    OP
       319 天前
    @PTLin 人嘛,要向前看
    opentrade
        52
    opentrade  
    OP
       319 天前
    @PTLin 难道你想啃那些老东西?
    PTLin
        53
    PTLin  
       319 天前
    @opentrade 我其实也感觉那些技术有点过时了,附带一提 1password 应该是用的 Electron 做的 gui ,他们的 GitHub 上有 electron rust 的一个 crate ,而且软件包里也能看出来。
    opentrade
        54
    opentrade  
    OP
       319 天前
    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  
       319 天前
    @meetcw 我猜可能用了 leanflutter 的 window_manager 和 tray_manager
    opentrade
        56
    opentrade  
    OP
       319 天前
    @xieren58 公司网站一直加载,看来他们的选型不值得参考。
    FrankHB
        57
    FrankHB  
       319 天前
    我没法给出可靠的具体建议,不过需要指出,光是想搞清楚什么算是“前”,对 GUI 开发者来讲都经常算是不切实际的奢望。从现状看,“过时”在这个领域中不应该是需要被优先考虑的缺陷(否则很容易发现新的都是一出生就更过时的)。
    cf. https://v2ex.com/t/852363#r_11667402
    KaoN
        58
    KaoN  
       319 天前 via Android   ❤️ 1
    wangyzj
        59
    wangyzj  
       319 天前
    顺便问问闲鱼 flutter 现在咋样了?
    opentrade
        60
    opentrade  
    OP
       319 天前 via Android
    @FrankHB 因人而异,我个人偏向与迎接新事物
    YARU
        61
    YARU  
       319 天前
    @opentrade 用 Chrome 能开(还挺炫酷) Firefox 就一直加载
    WebKit
        62
    WebKit  
       319 天前 via Android
    推荐 flutter 刚发布了新的 flutter 3 性能更好。
    opentrade
        63
    opentrade  
    OP
       319 天前
    @YARU 没办法,Flutter 肯定优先 Chrome 。
    zyxk
        64
    zyxk  
       319 天前
    @opentrade sciter.js 用起来还不错啊, 我提过几个 bug, 作者也修的挺快
    Immortal
        65
    Immortal  
       319 天前
    没有考虑过 druid 吗
    opentrade
        66
    opentrade  
    OP
       319 天前
    @zyxk 痛苦在后面
    opentrade
        67
    opentrade  
    OP
       319 天前
    @zyxk 作者人的确挺好,可惜去年发起募捐的行动失败,没有把开源社区搭建起来。如果他再年轻一些,Sciter 很有希望成为 Flutter / Tauri 之后的第三股力量。感觉 Sciter 项目主要就是靠他一个人在支撑,做的非常辛苦。
    opentrade
        68
    opentrade  
    OP
       319 天前
    @zyxk 作为上游使用者快两年,我看着都着急。
    wdhwg001
        69
    wdhwg001  
       319 天前
    我实际上更推荐 druid/iced ,因为你们是 RustDesk ,既然自豪地标榜自己是 Rust 系,那么理应就像其他 Rust 系桌面应用一样打心底里是排斥 Web 方案,并且也排斥带 GC 语言的方案的。

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

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

    还有 egui 也不错,无状态,省事。
    encro
        75
    encro  
       319 天前   ❤️ 1
    @KaoN

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

    不过你这是个 pc 端的,所以不清楚
    opentrade
        88
    opentrade  
    OP
       319 天前
    睡一觉过来,tauri 就反超了 flutter ,国内外关注度不一样。
    https://github.com/rustdesk/rustdesk/discussions/533
    Manweill
        89
    Manweill  
       319 天前
    案例一波 nodegui ,基于 QT5

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

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