Tauri 貌似是最好的选择,可是其性能应付不了我们的场景。Sciter 虽是采用 Html / Js,但是他的渲染是自己写的,有原生的 Video 接口。Tauri 采用自己的 Wry 统一了各个平台浏览器的 API 接口,但是无法打破浏览器边界的限制,可定制性和兼容性也低于 Electron。但是本人依然很喜欢 Tauri,因为小而美,开发调试方便,效率高,足以应付大部分场景的 Production 需求,期待它的未来发展,更希望它们自己的渲染实现能够早日达成。
Qt 也是比较实际的选择,可是看到 Qt 的 Rust 绑定之后,我们就不寒而栗,因为其接口还是 Unsafe 模式,所以也不敢继续看下去。
Flutter 前端开发更接近于原生的 UI 开发方式,复杂度明显高于历经风霜的 Web 技术,这一点从迁移后的代码行数就可见一斑,代码啰嗦臃肿很多,虽然换来了更好的工程实践和可维护性(对于我们这种小团队意义不大)。
复杂度倒是小事情,主要障碍还是开发过程中的各种天坑,虽然早前有所准备,早吃螃蟹肯定就得承担这些后果,但是没有预料到有这么大和多,在此列举几个有特点的问题,并公开一下我们对上游项目的贡献。
1,多窗口支持
但是这个 Pub 在 Windows 上只能支持到 Flutter 3.0.5,Flutter上有相关 issue,但是优先级低,估计等不了,还是得自己解决。我们暂时选择使用老版本 Flutter,毕竟目前也没看出新版本对 Windows 有什么明显的优化,个人感觉 Flutter 团队的重点还是在移动端,桌面端很多基本问题(多级菜单,本地光标,滚动条)都一直在拖。
2,窗口优化
3,本地原生 Cursor
4,多级菜单
目前我们尽量避免使用多级菜单,有原生菜单的实现,但是可定制很低,限制太多。
5,滚动条
滚轴速度慢,鼠标移到滚动条后滚轴失效
6,Bridge
7,Wayland 问题