SwitchHosts 5.0

2026-05-26

一转眼,SwitchHosts 已经存在了 15 年了,距离上一个大版本更新也过去 5 年了。最近抽空把 SwitchHosts 升级到了 5.0,最大的变化是将底层从 Electron 换成了 Tauri,安装包的体积小了很多。

这个过程的大部分工作都是用 AI 完成的,在这儿记录一下。

动机

这次升级的主要动机是想解决 SwitchHosts 体积过大的问题。

之前的版本是基于 Electron 实现的,打包后安装文件有大几十兆,且随着 Electron 版本的提升,这个体积还在不断变大,因为它内部依赖的 Chromium 等在不断变大。

Electron 是一个很好的框架,我还有一些其他项目也是基于 Electron 实现的,我很喜欢它。但 SwitchHosts 只是一个小工具,功能也很简单,几十兆的安装包对它来说有点重了,在 GitHub 的 issues 中也经常有人诟病这一点。

在这个版本之前我已经有很长一段时间没有对 SwitchHosts 做实质性的更新,原因之一就是考虑到后续可能要换架构,因此不太想再在原来的代码上做太多改动。

还有一个升级的动机则有点神奇:去年年底,SwitchHosts 收到了一笔来自 Warp 的赞助。虽然金额不多,却也是一个意外之喜了。

既然还有人在关注和使用 SwitchHosts,我想我也应该继续完善它,于是,就有了 v5 这个版本。

方案

SwitchHosts 需要支持 Windows、macOS、Linux 三个平台,我没有足够的精力同时维护三套代码,因此首选还是跨平台技术或者框架。

考虑到要尽可能复用之前的 UI,技术方案上还是需要选择 WebView 界面或类似的方案,因此最终可用的选项并不是太多,其中最为成熟的就是 Tauri 了。

我也考察过一些其他方案,其中 Wails 看起来不错,也有一些成功案例,不过它的生态似乎还是小了一些,同时它的 v3 还处在 Alpha 阶段,用在正式产品中有一定风险,如果我先用 v2 开发,可能不久之后又要再做一次迁移升级到 v3。

新出现的 Electrobun 也很有吸引力,它最大的优点是类似 Electron 可以使用 JS/TS 来写后台代码,不像 Tauri/Wails 那样需要使用 Rust/Go。不过它才发布没多久,看评价可能还有不少奇怪的 bug 或适配问题。

Tauri 当然也不完美,对前端来说最大的难点是一旦深入或者要做什么定制就要和 Rust 打交道,它打包体积小的代价是不同平台上可能会有不同的表现,推特上就有不少使用 Tauri 遇到大坑然后不得不放弃的经历分享。

不过,考虑到 SwitchHosts 只是一个功能比较简单的小工具,不会涉及太多复杂的平台相关的操作,在考察一圈之后,我最终还是选择了 Tauri。

过程

这次升级,大致上有两个阶段,分别是界面升级和架构升级。

界面升级

在投入 Tauri 之前,我先发了一个 v4.3.0 版,这个版本仍然是 Electron 架构,唯一的目标是先把 UI 框架从 Chakra 升级到 Mantine,主要原因是我在其他项目中大量使用 Mantine,对它更熟悉,也更喜欢它的设计风格。

架构升级

第二阶段则是重头戏,从 Electron 迁移到 Tauri。

迁移的工作基本都是由 AI (Claude Opus 4.6/4.7 + GPT-5.5)完成的,在动手之前,我先和 AI 聊了很久,先让它理解这个项目,然后评估迁移到 Tauri 的可行性,以及可能会遇到什么问题。

大体上的方案就是界面部分基本不动,但原本 Electron 的 main 进程的工作,迁移到 Rust 实现。虽然理论上大部分工作可以放到渲染进程中用 JS/TS 完成,后台只负责基础的数据读写等工作以尽量避免写 Rust,但有 AI 的帮助,我还是选择了把所有后台逻辑(原 main 进程的逻辑)转为了 Rust。

当把所有能想到的问题都考虑到,确认迁移能顺利完成之后,我再让 AI 根据结论,制定一个详细的迁移计划,包括分成几个步骤,每步骤要做什么,验收标准是什么,然后将这些步骤保存为多个 Markdown 文档。

接着,我人工检查了这些计划文档,继续向 AI 提问、修改,直到我自己看不出明显问题,然后交给 AI,让 AI 自己反复审核这些计划文档,寻找可能的风险点以及没有考虑周全的地方,直到 Claude Opus 基本没有发现问题,又让 GPT 再检查了几遍,确保没有明显的疏漏。

计划确定后,就是执行的步骤了。这个过程很简单,让 AI 读取计划文档,一步一步地执行,每完成一个步骤,就将进展写入一个专门的 .md 文件,这样一方面方便自己随时检查,另一方面也是为了在 AI 流程中断或者新开对话的时候能快速继续工作。

大概是前期计划比较充分,加上现在 AI 确实已经足够智能,迁移工作大体上很顺利,断断续续地搞了几天,核心迁移就基本完成,新的 Tauri 版能跑起来了。

再接下来,就是一些琐碎的工作,各种细节的处理,新版本 UI 的改造,一些小功能的调整,以及反复检查是否存在 bug 或潜在问题。相对于迁移来说这部分的难度小了很多,但耗时却更长一些。

成果

最终,Tauri 版打包后的安装文件只有数兆,其中最小的 Windows 版只有 2.7M,较大的 macOS 通用版也不过 7.6M,体积是 Electron 版的几十分之一。

不过,在运行的时候,Tauri 版仍然会占用一百至数百兆的内存,比 Electron 版略少一些,但不像安装包那样有数量级的变化。这些内存基本上是由 WebView 进程使用的,因为 Tauri 的界面本质上是 Web 页面,除非彻底换成原生方案,不然大概没有特别好的办法来进一步降低内存占用。

现在从体积上来说 SwitchHosts 是一个小工具了。后续我会在保持轻量的前提下,继续完善它。

小结

最近几年 AI 的发展可谓日新月异,即使是在一两年之前,我也无法想象仅靠 Vibe Coding 的方式就能完成如此复杂的工作。

这个迁移很复杂,工作量也很大,且我对 Rust 并不熟悉,如果没有 AI 的帮助,我不会有勇气采用这么激进的迁移方案,即使采用,耗时可能也会是现在的数倍甚至十倍。AI 已经深刻改变了程序员的工作方式。

使用 AI 进行复杂工作是可能的,但要注意先制定好详细的计划,并将这些计划按阶段写成文档,然后让 AI 一步一步地执行。因为 AI 的上下文窗口大小有限,如果不将计划写下来就直接开始,AI 很可能执行到后面就忘了前面。

最后,喜欢各位新老用户喜欢 SwitchHosts 的新版本。❤️

分类:编程标签:SwitchHosts
前一篇开源本站博客系统 - Publa
后一篇

相关文章:

评论:

暂无评论

发表评论:

电子邮件地址不会被公开。必填项已用 * 标注。
0 / 2048