第一版播放器是 2024 年底开始写的,Electron + React,断断续续做了两个多月。它能播放、能管理歌单、有歌词和频谱,作为第一个桌面应用,我当时挺满意。
一年多以后再打开它,看到的更多是问题:安装包上百兆、内存占用偏高,托盘和全局快捷键靠一层层胶水代码拼起来,状态全部堆在一个 store 里。
为什么不是修,而是重写
修补可以解决具体的 bug,但解决不了结构上的问题。而且我一直想系统地学一次 Rust——与其写玩具示例,不如拿一个自己熟悉需求的项目来练手。需求是已知的,难点就只剩技术本身。
第二遍看清的东西
进程边界要先想清楚。 第一版里,界面层什么都能做,什么都在做。第二版先划好边界:界面只管展示和交互,系统能力交给 Rust,音乐数据由独立的本地服务提供。边界清楚了,「这段逻辑该写在哪」就不再需要每次纠结。
桌面能力不要在 Web 层模拟。 原生右键菜单、托盘、系统媒体中心,用 Web 模拟总差一点手感。Tauri 的插件和 Rust 实现让它们「本来就是系统的一部分」。
Rust 的严格是一种保护。 一开始被借用检查器反复拦下很沮丧,后来发现,它拦下的大多是我在 JavaScript 里会写出来、却要很久之后才暴露的问题。
还在学的
Rust 的异步运行时、跨平台打包签名、Windows 和 macOS 的行为差异,都还有很多没弄透的地方。项目的更新日志里记着每一次改动,也算是一份学习记录。
写两遍同一个东西,第一遍学的是「怎么做出来」,第二遍学的是「为什么要这样做」。