5MB 应用体积从哪来——PakePlus 与 Electron/PWA 的轻量对比
先看一组数字
| 方案 | 典型产物体积 | 运行时依赖 | 启动速度 |
|---|---|---|---|
| Electron 壳 | 150-250MB | 内嵌 Chromium + Node.js | 慢 |
| PWA | 网页本身 + 可选离线缓存 | 浏览器 | 快但依赖浏览器 |
| Tauri CLI | 3-8MB | 系统 WebView | 快 |
| PakePlus | 4-6MB | 系统 WebView | 快 |
| Nativefier(Electron 封装器) | 150-200MB | 内嵌 Chromium | 慢 |
PakePlus 和 Tauri CLI 体积接近,因为本质上走的是同一条技术路线。Electron 之所以胖,是因为它把一个完整的 Chromium 浏览器引擎直接打包进了每个应用。
系统 WebView 是关键
PakePlus 背后的核心技巧是不自己带浏览器,而是借操作系统已经装好的 WebView:
- Windows:WebView2(基于 Chromium,Win10/11 默认自带,Win7 需要单独安装一次)
- macOS:WKWebView(Safari 的引擎,系统自带)
- Linux:WebKitGTK(GNOME/KDE 等桌面环境通常已预装)
- Android:Android System WebView
- iOS:WKWebView(系统自带)
这样做的代价是:如果目标系统的 WebView 版本过旧,某些新网页特性可能不兼容。但好处是应用本身不需要维护浏览器引擎,体积从几百 MB 砍到几 MB。
速度差 10 倍是夸大吗
"性能快 10 倍"这个说法有营销成分,但方向是对的:
- 冷启动:Rust 编译出的原生二进制直接运行,不需要初始化 Node.js 运行时。Electron 应用启动时先要拉起 Node.js 进程,再创建 Chromium 窗口。
- 内存占用:Electron 应用通常吃掉 200-400MB RAM(一个完整 Chromium 进程)。PakePlus 桌面应用的主进程只有几 MB,渲染进程走系统 WebView,占用跟浏览器开一个标签页接近。
- CPU:少了 Node.js 运行时这一层,主线程开销更小。
实际感受上,PakePlus 打包出来的应用启动速度接近桌面原生软件,而 Electron 应用通常有一个能感觉到的延迟。
体积差对用户意味着什么
- 下载秒完:5MB 的安装包在多数网络环境下几秒钟就能下完,200MB 的 Electron 包在弱网下可能要等好几分钟。
- 磁盘省空间:装 10 个 PakePlus 应用才 50MB,装 10 个 Electron 应用可能要 2GB。
- 分发友好:小体积安装包更适合通过 IM、网盘、甚至邮件附件直接分享。
- 移动端尤其重要:手机用户对安装包大小更敏感,APK 超过 100MB 下载意愿明显下降。
PWA 和 PakePlus 的取舍
PWA 体积最小(本质是网页),但有几个硬伤:
- 不能在系统托盘常驻
- 不能调用系统级 API(文件下载、命令执行等)
- 离线能力有限
- iOS 上的 PWA 体验差(系统限制多)
PakePlus 产物作为独立应用,这些都能做。代价是需要用户安装、占系统 WebView 进程。如果只是把一个常用网站变独立窗口,PakePlus 比 PWA 更像一个真正的桌面应用。
例外情况
有几种场景 PakePlus 的体积优势会打折扣:
- 打包特别大的前端项目(比如包含大量静态资源的 Unity WebGL 构建),dist 本身就几百 MB
- 视频/音频密集网站,单个文件超过 10MB 会触发 GitHub 限制
- 需要兼容 Win7 的情况,WebView2 可能需要用户额外安装
这些场景下产物体积会大一些,但仍然远小于等价的 Electron 方案。