上周清理 Mac 磁盘,看到一个更新到最新版的"轻量"工具,右键看大小——489MB,Contents 文件夹里躺着 360MB 的 Chromium Framework。我就查个单词,至于吗。
慢。启动要转圈,风扇偶尔狂转。我一度以为是电脑老了,后来才反应过来:不是电脑的问题,是我每天都在替 Chromium 打工。
每个 Electron 应用都自带一整套浏览器内核。怎么说呢,就像每家餐厅都自带一个发电厂,就为了给你热一碗饭。
那你可能要问了:不做 Electron,桌面应用还能怎么做?
后来我在 Hacker News 上刷到一个项目,叫 TinyJS。说白了,这就是一个用 JS 写桌面应用的运行时——你照样写 HTML/CSS/JS,但打包出来只要 6MB 左右。没有 Electron、没有 Node、不捆 Chromium,前端直接调系统自带的 WebKit 渲染,后端跑在一个叫 txiki.js 的迷你 JS 运行时上(QuickJS 内核,还内置了 SQLite)。
大白话翻译:以前做桌面应用 = 出门随身扛一台发电机;现在 = 到哪儿都能插公家的插座。
项目地址:https://github.com/tarwin/tinyjsapp
最打动我的不是技术本身,是作者为什么做它。他在帖子里吐槽的原话大意是:受够了。他用的记账软件 Harvest,从最早的 5MB 一路膨胀到 500MB——一个更新包,比电脑上所有办公软件加起来还大。于是他用 6 周时间徒手搓出这个 6MB 的运行时,还顺手在 examples 里复刻了一个 Winamp 风格的播放器(amp)当 demo。用 JS 徒手写出一整套桌面运行时,真的服。
安装也直接,一条命令的事:
curl -fsSL https://tinyjs.app/install | sh
tinyjs new myapp
cd myapp
tinyjs dev
窗口就出来了。dev 模式下改前端代码热更新,后端改完自动重启进程,全程不用关窗口。第一次跑完 build 我差点以为装失败了——打包出来的 .app 才 6.1MB,Finder 里看过去像个半成品,双击,还真能跑。
和我之前折腾过的方案放一起比:
| Electron | Tauri | TinyJS | |
|---|---|---|---|
| 打包体积 | 150MB+(实际常超 300MB) | ~10MB | ~6MB |
| 后端语言 | JS | Rust | JS(txiki.js) |
| 渲染内核 | 自带 Chromium | 系统 WebView | 系统 WebKit |

不过冷静下来,槽点也得说清楚。TinyJS 现在才 25 个 star,作者基本一个人在维护,Windows 和 Linux 还是 beta。README 里 Linux 的音频坑就写了好几屏:AAC 播放要自己补装 GStreamer 插件,Web Audio 走系统线程会爆音,只能绕道用他给的 sampler API。txiki.js 这个小众运行时,npm 生态的包能不能直接在后端跑,得一个一个试。想拿它做严肃的生产项目,现阶段我劝你慎重。
原理大概是这样,细节可能有出入——有懂的大佬欢迎指正。txiki.js 这块我也没完全搞懂,毕竟它跟 Node 的模块兼容性到底差多少,光看文档看不出来,得踩坑才知道。
说到底,这个项目最戳我的地方在于:当主流方案越来越臃肿时,总有人愿意停下来问一句"真的需要这么大吗"。6MB 当然不完美,但至少证明了一件事——Electron 的 500MB,不是桌面应用的宿命。
我会不会长期用它?说实话,早期项目,我暂时不会把核心工具迁过去。但我会盯着它的更新。哪天我又被某个几百 MB 的"轻量工具"逼疯,我会第一个回来翻这个仓库。想尝鲜的朋友可以玩玩,装不装都行,看你自己需求。
如果你对桌面应用瘦身这话题感兴趣,同类思路里更成熟的替代品是 Tauri(Rust 写,走系统 WebView,体积能压到 10MB 左右)。我上次还写过一篇 Electron 体积相关的吐槽,后台回复「体积」可以翻出来看看。
好了,我继续删磁盘上那些几百 MB 的"轻量"应用去了,回见。