2024 年了,兄弟们说说用 Tauri 遇到的哪些坑

2024-05-15 10:25:56 +08:00
 ninjaJ

目前我的主力桌面端开发框架用 javafx ,简单点的用 electron ,但是各自有各自的缺点。

我司开发的主要是工业软件,涉及到串口通信等硬件交互,IO 密集、计算密集。但是我又很想用前端技术栈把 UI 分离出来( PS:原生桌面框架 UI 样式不好写--不仅限于对齐、窗口自适应、flex 等等,各种绑定事件样板代码,写一个软件大部分时间都在写这些东西),可能主要还是已经习惯了前端技术栈那一套丰富的生态和灵活性。

选了一大圈好像还是基于 rust 的 Tauri 对我胃口,就是不知道它现在怎么样了,还有那么多坑吗?

9555 次点击
所在节点    程序员
46 条回复
subframe75361
2024-05-15 10:33:44 +08:00
现在的最佳实践似乎是 electron + napi-rs
skye
2024-05-15 10:35:19 +08:00
javafx 更好吧,毕竟 jni 和 jna 比 napi 还是成熟一些。
iugo
2024-05-15 10:43:13 +08:00
Tauri 可以包含多个自己的服务端, 比如 Go 写个工具, 向外部暴露一个 HTTP 服务, Tauri 将其打包在内, Tauri 内部调用这个 HTTP 服务. Tauri 只做最简单的 UI 及渲染, 然后使用 Tauri 的工具链打包什么的, 任何复杂功能不需要重构, 只需要暴露出 HTTP 服务供调用就行.
ninjaJ
2024-05-15 10:46:49 +08:00
@subframe75361 我的粗浅理解是 electron 和 Tauri 的 UI 层对我来说都一样,既然都用 napi-rs 了,为什么不直接上 Tauri 呢?您说的这个最佳实践评判的方式可以详细分享一下吗?
ninjaJ
2024-05-15 10:48:13 +08:00
@skye 我本身很擅长 java ,但是用 javafx 写的唯一的难受点是 UI 不够灵活高效,写的太难受了
sunjiayao
2024-05-15 10:50:24 +08:00
我目前碰到的问题可能就是 js api 有的比较简陋。比如读取剪切板只能读纯文本,做不到注册 windows 监听事件。需要用 rust 对接 windows api 。但用下来整体觉得没什么问题,可能是因为我大部分代码工作都在 rust 导致的。webview 基本只做 ui 展示。

然后由于我用的是 tauri 2.0 所以会有一些 bug ,不过目前都能绕过去。还未碰到卡住无法实现功能的问题。
ZField
2024-05-15 10:51:58 +08:00
可以试试 compose multiplatform for desktop ,ui 部分使用 kotlin 。其他的 Java 代码可以拿来就用
per
2024-05-15 11:21:05 +08:00
直接上 Twitter 上搜 yetone tauri
lsk569937453
2024-05-15 11:23:08 +08:00
多窗口不成熟。
subframe75361
2024-05-15 11:27:28 +08:00
@ninjaJ electron 的坑踩的差不多了,业务逻辑也是 js 写的快一些,工业软件包体积应该不是问题,总体开发效率比 tauri 高。如果 ui 只是简单交互,tauri 也可以胜任,只是目前没听说过有成熟的产品,多是一些小工具
w568w
2024-05-15 11:27:41 +08:00
> 原生桌面框架 UI 样式不好写--不仅限于对齐、窗口自适应、flex 等等,各种绑定事件样板代码,写一个软件大部分时间都在写这些东西

可以试试 Flutter 或者楼上说的 Compose Multiplatform ,应该都独立于 Web 技术解决了这个阻碍。

> 串口通信等硬件交互,IO 密集、计算密集

Flutter 用的 Dart ,直接编译成原生代码,计算性能不会太差,但搞硬件交互可能要研究一下,估计要调第三方包; Kotlin 应该轻松一些。


> Tauri 对我胃口,就是不知道它现在怎么样了,还有那么多坑吗?

最大的问题是性能和兼容性差。我自己的不准确经验来看 Tauri 开发稍微大点的应用就会特别特别粘滞:冷启动慢、响应点击慢、拖动窗口慢、调整窗口大小卡,而且 Tauri 首次编译速度也慢得令人头秃(即便和 Electron 作比较,以上缺点也成立);另外,因为一定要接系统的 Webview 库,写的时候也得注意兼容性问题。
w568w
2024-05-15 11:29:37 +08:00
补:Flutter 有 rust_bridge ,如果你一定想掺 Rust 进来,也不麻烦。
vivisidea
2024-05-15 11:32:54 +08:00
@per 哈哈,自从这哥被 tauri 坑了之后,疯狂反向安利 tauri😁
subframe75361
2024-05-15 11:34:23 +08:00
另外说一点,从我的个人体验上来说,tauri 的优势只有一个体积小。内存占用只要开着窗口就和 electron 没区别,启动体验在 windows 11 上不如 electron ,electron 在关闭 node 集成后也可以很安全
duan602728596
2024-05-15 11:50:22 +08:00
还是老老实实用 Electron 吧,真的。
我曾经也想过换其他框架,但是一想到用的东西,其他框架都不提供,就算了。
roundgis
2024-05-15 11:52:33 +08:00
知道 javafx 被用在工業軟件

還是有點意外的
lisongeee
2024-05-15 12:04:02 +08:00
js 写页面还有一个在开发页面速度上其它语言无法相比的优点啊

那就是配合声明式 ui 框架 react/vue 和构建工具 vite/webpack 可以有 hot module replace 即 HMR

效果就是更改一个组件的文件后,页面无需重启直接就能看到更新后的组件渲染效果,这对开发速度提升得不是一点半点啊

上面说的那些 javafx compose 受制于语言特性都没有这个功能(或者是残废)啊,大项目改一个文件编译尼玛大半天然后重启进程还得手动点击回到原来页面的位置才能看到效果
mark2025
2024-05-15 12:10:59 +08:00
@lisongeee 再配合上 TypeScript 提供的静态类型检查,真是很不错的
hanaTsuk1
2024-05-15 12:11:42 +08:00
可以等 2.0 正式版出来试试 2.0-alpha 到 beta 的改动还挺多
xieren58
2024-05-15 12:12:58 +08:00
工业用 c# , 库多, UI 可以用 https://avaloniaui.net/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1040867

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX