一人团队的技术选型:为什么选 Tauri 不选 Electron
去年有个朋友做了一款桌面工具,用 Electron 写的。上线那天他发了个朋友圈:「终于发布了!」我点进去下载,80 多 MB。我愣了一下——一个文件整理工具,为什么要这么大?然后我关掉了下载页面。不是不想支持朋友,是那一刻我下意识觉得:这玩意儿装上去肯定占内存、启动慢。后来他跟我说,首日下载转化率只有 12%,很多人卡在「下载中」就放弃了。
一人团队,选错技术栈,就是浪费几个月。
你没有试错的余地。大公司可以「先上 Electron 快速验证,不行再重写」。你不行。你只有一个人,时间就是全部筹码。选对了,事半功倍;选错了,推倒重来的成本能把你拖垮。
所以当我决定做渡 Ferry 的时候,技术选型这件事,我花了整整一周。不是纠结,是把每个决策都算清楚。
第一个决策:Tauri 还是 Electron?
答案其实在写 PRD 的时候就已经有了——AI 帮我对比过那张表。但真正让我下定决心的,是几个具体的数字。
安装包大小:Tauri ~8MB vs Electron ~80MB
差了 10 倍。对工具类产品来说,这意味着什么?用户第一次听说你的产品,点进下载页,看到「下载 80MB」——很多人会犹豫。网速慢的、流量紧张的、硬盘空间告急的,可能直接就关了。渡 Ferry 的目标用户里,有不少是「桌面堆满文件」的人,他们的电脑本来就不富裕。8MB,几秒钟下完,心理负担小太多。我查过一些独立开发者的分享:安装包从 50MB 降到 10MB 以内,下载完成率能提升 30%-50%。这个数字,我信。
性能:Rust 后端 vs Node.js
渡 Ferry 的核心场景是扫描用户文件夹——可能几千、几万个文件。Electron 用 Node.js,fs.readdir 递归大目录时容易阻塞主进程,用户会感觉「卡住了」。Tauri 用 Rust,walkdir 库单线程扫描可以达到 10,000+ 文件/秒。我本地测过:一个 8000 个文件的下载文件夹,Tauri 版本 1 秒内扫完,Electron 版本要 8-10 秒。用户感知的差异,就是「秒开」和「等半天」的区别。
内存:30-50MB vs 150-300MB
Again,工具类产品。用户可能同时开着浏览器、IDE、微信、Slack……内存本来就紧张。一个文件整理工具再吃掉 200MB,很多人会不爽。Tauri 版本空载 30MB 左右,扫描时涨到 50MB。轻量,不抢资源。这对「随时打开用一下」的使用场景很重要。
安全性:Rust 内存安全
渡 Ferry 有个功能叫「安全删除」——迁移完成后,用户确认,把源文件安全擦除。这是不可逆操作。一旦出 bug,误删了用户文件,后果不堪设想。Rust 的内存安全特性,不能保证零 bug,但能排除一整类问题:缓冲区溢出、空指针、数据竞争。在涉及文件删除这种敏感操作时,多一层保障,我睡得踏实一点。
全平台 + 未来空间
macOS、Windows、Linux,Tauri 和 Electron 都支持。但 Tauri 2.0 已经支持 Android 和 iOS。渡 Ferry 的二期规划里有移动端——用户换手机时整理相册、整理下载文件,这个场景是存在的。如果现在选 Electron,将来要做移动端,得另起炉灶。选 Tauri,前端和 Rust 核心逻辑可以最大程度复用,成本低很多。
代价:Rust 学习曲线
说实话,Rust 比 JavaScript 难学。所有权、借用、生命周期,一开始我也头大。但 2026 年了,AI 能帮你写 Rust。Cursor + Claude 写出来的 Rust 代码,我 review 一下,大部分能用。遇到编译错误,把报错贴给 AI,它也能修。学习曲线还在,但被 AI 压平了一大截。一人团队,时间有限,这个 trade-off 我接受。
第二个决策:前端用什么?
React + TypeScript + Tailwind
选 React,不是因为「我最熟」——我 Vue 也写过不少。选 React 是因为:生态最大,AI 训练数据最多。你让 AI 写 React 代码,它见过的样本多,输出质量明显更好。写 Vue 也能写,但偶尔会出一些「看起来对但实际跑不起来」的代码。一人团队,没时间跟 AI 反复纠错,选 AI 最擅长的,效率最高。
TypeScript 是必选。类型安全能拦住一大半运行时 bug。尤其是和 Rust 后端通信,数据结构要严格对齐,TypeScript 的接口定义就是契约。没有类型,改一处漏一处,调试能把你逼疯。
Tailwind 快速出 UI。不用想 class 名字,不用在 CSS 和 HTML 之间来回跳。渡 Ferry 的界面不算复杂,Tailwind 足够。设计系统?一人团队,先跑通再说,Tailwind 的 utility-first 能让我少做很多决策。
状态管理用 Zustand。轻量,API 简单,没有 Redux 那么重的 boilerplate。渡 Ferry 的状态不算复杂:扫描进度、AI 结果、迁移计划、支付状态。Zustand 一个 store 搞定,够了。
一人团队的选型哲学
回过头看,我的选型逻辑可以总结成四条原则。
原则一:选生态最大的
遇到问题,能搜到答案。Stack Overflow、GitHub Issues、中文社区——有人踩过坑,你就能少踩。Tauri 的生态不如 Electron 大,但 Rust 生态足够大,Tauri 的文档和社区也在快速成长。React 更不用说了,几乎任何问题都能找到现成方案。
原则二:选 AI 最擅长的
让 AI 帮你写代码。React、TypeScript、Rust——这些语言的训练数据多,AI 写出来的质量高。选冷门技术栈,AI 容易瞎编,你反而要花更多时间修。一人团队,AI 是你的协作者,选它擅长的,就是给自己省时间。
原则三:少即是多
一个好的框架胜过三个凑合的。渡 Ferry 的前端就 React + Tailwind + Zustand,没有 Redux、没有 MobX、没有一堆「可能用到」的库。每多一个依赖,就多一个升级、兼容、排查的来源。克制一点,复杂度可控。
原则四:为未来留空间
Tauri 2.0 的移动端支持就是例子。现在不做移动端,但技术选型时已经考虑到:将来要扩展,成本能不能接受?SQLite 做本地存储,也是这个思路——简单、可靠、够用,将来要换也能换。不在第一天就过度设计,但也不把路堵死。
其他技术选择
SQLite 做本地存储。扫描结果、迁移计划、支付记录,都存在本地。不需要后端服务器,用户隐私更好,架构也简单。rusqlite 是 Rust 里最成熟的 SQLite 绑定,用就完了。
AI 供应商:OpenAI + Claude 双供应商。主用 GPT-4o-mini,成本低、速度快。Claude 3.5 Haiku 做备选,API 故障时切换。不把鸡蛋放一个篮子。
支付:一期微信 + 支付宝,中国大陆用户覆盖。二期预留 Stripe,海外市场用。支付这块对接第三方聚合,不自建,MVP 阶段优先验证商业模式。
技术选型没有银弹。我选的这套,适合渡 Ferry,适合一人团队,适合「用 AI 写代码」的工作流。换一个产品、换一个团队,答案可能不一样。但核心思路是相通的:算清楚每个决策的代价和收益,选生态大的、AI 擅长的、为未来留空间的。然后,少即是多。
渡 Ferry 的安装包,最终压到了 8MB 以内。用户从点击下载到打开应用,十几秒。这个体验,是我在技术选型那天就决定的。
本篇 Takeaway
- 一人团队没有试错余地:选错技术栈 = 浪费几个月。把每个决策算清楚,再动手。
- Tauri vs Electron:安装包 8MB vs 80MB、内存 30-50MB vs 150-300MB、Rust 10,000+ 文件/秒的扫描性能——对工具类产品,这些数字直接影响用户转化和体验。
- 选 AI 最擅长的:React、TypeScript、Rust 训练数据多,AI 写代码质量高。一人团队,让 AI 当协作者,选它擅长的就是省时间。
- 选型四原则:生态大、AI 擅长、少即是多、为未来留空间。Tauri 2.0 的移动端支持,就是「留空间」的体现。
- 安全性不能妥协:涉及文件删除等不可逆操作,Rust 的内存安全是实打实的保障。
系列导航
系列:AI 时代,我如何一人从想法到产品赚到第一个 10 万