Tiny RDM 新年新版本来了,也顺便总结下使用 wails 半年的感受

342 天前
 huangliu

Tiny RDM这个项目应该是 23 年 6 月左右建的,8 月正式公开仓库,当时做的目的一是为了验证 wails 开发桌面应用的可行性,二是想学尝试和折腾下独立产品推广和获客。一路坚持下来已有半年,耗费大量时间精力,分文未挣,做开源确实不易~这个版本后会稍微放缓加新功能速度,提高软件稳定性,并尝试下海外推广。

这次更新了什么

惯例先说说 Tiny RDM 更新内容,着急想看 wails 使用感受的,可以直接跳过


这个项目第一次在 v 站曝光的时候,很多小伙伴就对 wails 开发桌面应用的可行性感兴趣,我就以个人使用半年的经历,大概总结一下类似 wails/tauri 这类基于 webview 的框架一些优缺点。先给结论:基于 Webview 的应用目前还是不太适合用来开发商业应用,但是很适合想快速做一些小工具的。

优点

  1. 打包包体极小。由于并不包含浏览器运行时,所以包体随便能到 10M 以下。但并不意味这内存占用小,和自带浏览器的 electron 类应用相比,实际运行起来内存占用半斤八两,毕竟本质都是 web 应用。
  2. 如果你是个 gopher ,又刚好会写点前端网页,那 wails 会是你很好的选择,开发时也能直接浏览器运行,即改即刷新。写些小工具速度还是一流的。这也是我选择 wails 的原因之一,只是没想到 Tiny RDM 它越写越多越庞大了😂。
  3. 前后端自动绑定,只要 Go 中声明要导出的结构体实例,写好接口方法,就能自动生成 JavaScript 方法声明,直接调用即可,无论是 Go 端的结构体,还是 JavaScript 端的数组/对象,都能比较友好地进行转换。而且还有基于通知的实现,方便两端进行频繁的数据传输。
  4. 可自定义资源服务。这也是基于 Web 的 App 一个好处,通过自定义资源路径来决定本地资源读取路径,甚至是读取远程资源文件,可以以此为基础实现资源热更新。后面有机会也会给 Tiny RDM 加入版本热更新,不用每次新版都跳到 Github 上去下载。

缺点

  1. 兼容性一般。这个 electron 类应用的优势就体现出来了,毕竟不同平台上的浏览器内核或多或少都会有差异。有时会遇到一个正常的写法在 Windows 和 macOS 上运行得好好的,在 Linux 上就错位了,这让我想起了 IE6/7/8/9 时代的噩梦。比如在一些旧版本的系统上(有用户反馈 win10 也会),甚至会出现整个页面都是白屏或者不显示,这相关的几个 issue 目前还躺在那等着大牛来处理~相信随着时间的推移,和新老版本操作系统的更替,这些不兼容性的问题会逐渐消失,基于 Webview 开发的应用也会越来越多。
  2. 运行效率一般。后端一些复杂的逻辑和数据处理使用 Go 没啥问题,但是中间涉及到前后端通讯都会有所消耗,而且前端处理能力就摆在那,所以瓶颈往往是在前端。在一些比较复杂的界面,比如树形列表,进行一次大量的增删操作,往往需要拆分多次来处理,拆分后每次处理的量实际也不好把控,数量多了容易导应用假死,数量少了一个完整的操作就需要耗费更多时间。
  3. 系统级的接口不够。tauri 相对会好一些,但这个还是比 electron 差太多了。比如我想监听主窗口的尺寸和位置变化,并实时保存变化后的值方便下次启动应用时恢复,也只能依靠些奇技淫巧来解决(新开个 goroutinue 来定时获取和判断窗口是否有变化)。像比较常用的多窗口支持和系统上下文菜单等等,wails 目前也是缺失的。
  4. 打包工具不完善。虽然通过 wails cli 就能打包,但是整体还是差强人意,Windows 和 macOS 上还算够用,但 Linux 上就不太舒服了。目前 Tiny RDM 打包使用的是 Github Action ,配置文件部分参考了另一个使用 wails 的开源项目october并做了自定义修改。目前 Tiny RDM 支持 deb 安装包,但是由于 Linux 版本众多,依赖的 Webview 也各不相同,所以 deb 有时都不能做到即装即用,还要安装 Webview 运行时等等(这个问题在旧版的 Windows 上也有)。其中呼声最高的 appimage 格式,目前我也暂时无能为力。
  5. 不支持导出 Web 端。这个和上一点说的有些重复,单独作为一点是因为它本身就是基于 Web 开发的应用,大部分人应该都默认它会原生支持 Web 模式了,但实际上却不支持打包 Web 版本,这多少还是有点说不过去。目前开发模式下可以直接通过浏览器运行和调试前端,但也仅限于开发模式下了。并且包括一些系统接口也不支持 Web 端的,如打开对话框选择文件,Web 模式下打开的却是在 App 端的系统文件选择对话框。不过真正麻烦的应该是 Go 后端逻辑没法在浏览器运行,相信随着 Golang 的 Webassembly 逐步成熟,后续官方会支持起来的。
  6. 插件市场不丰富。wails 目前没有官方的插件市场,也就只能依靠丰富的 Web 插件和不太丰富的 Golang 第三方依赖了。但比较尴尬的是,NPM 上也只能用使用纯前端插件,而 Go 的依赖大多数是为了服务后端的,服务于操作系统的不多,比如 Tiny RDM 中用到的第三方依赖userdir,用于获取本机中用户数据目录的,最后一次更新是 9 年前了。所以前后端语言都有生态市场,但都挺难用于 wails 。

以上仅仅是一个代码佬的牢骚观点,不代表一个框架一定得有个高低优劣之分,这东西没有银弹,用得顺手才是最重要的,不然可能项目还没做出来,作者就已经先鸽了。所以下一个项目我想尝试下 flutter ,没什么原因,纯属是感兴趣~

最后走过路过,也为 Tiny RDM 赚点吆喝。希望它能给使用 wails 和 vue 的开发者带来一点价值,也希望它能在 Redis 客户端这个领域为用户提供多一个选择。

项目源码地址:https://github.com/tiny-craft/tiny-rdm

项目官网地址:https://redis.tinycraft.cc


此外本人正式开通微信公众号,不定期更新独立开发以及产品相关内容,欢迎扫码关注和交流

4577 次点击
所在节点    分享创造
27 条回复
nullcache
342 天前
可以的,对 wails 开发很感兴趣
devswork
342 天前
winget 上,包版本还停留在 1.1.2
HelloWorld556
342 天前
日常使用中
foundyou
342 天前
实名点赞,虽然用的是另一个软件,但是楼主积极采纳建议更新的态度让我相信这个软件会火起来的
28Sv0ngQfIE7Yloe
342 天前
这么优秀的项目分文未赚不应该吧
devswork
342 天前
必须给 star !~
hiveex
342 天前
实名点赞
hiveex
342 天前
公司测试环境试用了一下 发现点击所有 key 都会报错 load key summary fail: error unknown command memory

Redis version 3.2.10
hiveex
342 天前
感觉报错后 key 就在界面上消失 是不是不太合理
huangliu
342 天前
@hiveex 大意了,memory 命令只支持 4.0 以上版本。你可以先到偏好设置把“键图标样式”改为“键图标”,这个问题我晚点改下
huangliu
342 天前
@hiveex 不对,我楼上的说错了,改图标样式没法临时解决的,等我晚点提交代码兼容下,确实没测太低版本的 redis
hiveex
342 天前
@huangliu 2.5k 笔记本 列表下拉拖条太小了点
qinfengge
342 天前
昨天在用 Another Redis Desktop Manager 导入导出数据时一直有问题,所以试了下这个软件,目前感觉还行
huangliu
342 天前
@qinfengge 它有什么不好的问题,可以告诉我,我来解决哈哈。导入导出我发现它少了过期时间,所以我做的时候加上了,后面我还想支持直接导入 RDB 文件
qinfengge
342 天前
@huangliu #14 发现个小问题 导入的时候确认按钮是确认导出
imherer
342 天前
已 star

顺带问下 op 应该也有研究过 tauri 吧,问下这俩对比更倾向于哪一个呢
NickLuan
342 天前
点赞,使用中...
huangliu
342 天前
@qinfengge 这个按钮晚点改

@imherer 熟悉 go 就 wails ,不然建议优先 tauri
huangliu
342 天前
@hiveex 2.5k 屏的截图可以的话发我下,可能需要提供浏览器的放大缩小功能,wails 没这接口,只有启动初始化的时候可以设置,我后面看看怎么处理
lstz
341 天前
感谢分享,我的项目也计划上 wails ,目前只有 web 版 cloud.laf-tools.com

错位的问题比较难搞,我一般不太敢用很新的 css feature ,我觉得用 calc 加上 js 辅助就能大概实现了

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

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

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

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

© 2021 V2EX