Perry 对比 Electron
Electron 让你用 Web 技术(HTML/CSS/JS)构建跨平台桌面应用,方法是把 Chromium 与 Node.js 一起打包进应用。Perry 则把 TypeScript 直接编译为原生机器码,并通过真正的平台组件——AppKit、UIKit、GTK4、Win32、JNI——来渲染 UI。Electron 的卖点是 Web 技术复用;Perry 的卖点是从 TypeScript 出发交付小体积原生二进制 + 原生 UI。
什么是 Electron?
Electron 是一个开源的跨平台桌面应用框架,使用 Chromium 进行渲染、Node.js 进行系统访问。每个 Electron 应用都自带一份 Chromium 和 Node,因此即便是 hello world,Electron 应用安装包通常也有 80–150 MB。Electron 支撑了大量被广泛使用的应用,包括 VS Code、Slack、Discord 和 Figma 桌面客户端。它面向 Linux、macOS 和 Windows 桌面;没有官方的移动、手表或 TV 方案。
什么是 Perry?
Perry 把 TypeScript 直接编译为原生机器码,没有浏览器引擎、没有 Chromium,也没有 Node 运行时。UI 层(perry/ui)是一套 SwiftUI 风格的声明式系统,通过 macOS 上的 AppKit、iOS/iPadOS/tvOS 上的 UIKit、Linux 上的 GTK4、Windows 上的 Win32 以及 Android 上的 JNI 映射到原生平台组件。hello world 二进制约 330 KB;带完整标准库(Fastify、mysql2 等)的应用约 48 MB。
并排对比
| 特性 | Perry | Electron |
|---|---|---|
| 渲染 | 原生平台组件(AppKit、UIKit、GTK4、Win32、JNI) | 内置 Chromium(HTML/CSS/JS) |
| 内置引擎 | 无(仅在 --enable-js-runtime 时可选 V8) | Chromium + Node.js |
| hello world 安装包大小 | 约 330 KB | 约 80–150 MB |
| 完整应用安装包(标准库 + 框架) | 约 48 MB | 通常 100–200+ MB |
| 内存占用 | 原生(典型为数十 MB) | 多个 Chromium 进程(典型为数百 MB) |
| 移动 / 手表 / TV | 支持——iOS、iPadOS、Android、watchOS、tvOS、Wear OS | 不支持(仅限桌面) |
| UI 语言 | TypeScript,SwiftUI 风格的声明式 API | HTML/CSS/JS(Web 技术栈) |
| 自动更新 / 打包 | perry publish(Homebrew、APT、App Store、Play Store) | electron-builder、electron-updater(生态成熟) |
| 成熟度 | Pre-1.0 | 稳定,已有十余年生产经验 |
Perry 胜出之处
- +二进制大小。Perry 的 hello world 约 330 KB;Electron 的 hello world 因为每个应用都自带一份 Chromium,通常在 80–150 MB。
- +内存占用。Perry 应用作为单个原生进程运行;Electron 应用会跑多个 Chromium 进程(渲染器、GPU、辅助进程等),空闲时也消耗数百 MB 内存。
- +原生外观与体感。Perry 通过真正的平台组件渲染,因此应用会自动继承操作系统约定(焦点环、可访问性、IME、滚动手感)。
- +移动、手表、TV。一份 Perry 代码可编译到 iOS/iPadOS/Android/watchOS/tvOS/Wear OS。Electron 仅限桌面。
- +冷启动。原生二进制不需要支付 Chromium 与 Node 的启动开销。
- +在紧凑代码上的真实 CPU 性能。在多数计算微基准里,Perry 都以多倍领先 Node(即 Electron 所用的 JS 引擎)(见 perry/benchmarks)。
Electron 胜出之处
- +成熟度。Electron 已在生产中跑了十多年,支撑着 VS Code、Slack、Discord 等众多应用,工具链经过实战检验。
- +Web 技术栈复用。如果你的团队已经在做 Web UI,Electron 让你直接把它作为桌面应用交付,无需重写。
- +跨平台 UI 一致性容易做到——Chromium 在每个 OS 上的渲染基本一致,这正是某些产品想要的。
- +海量 npm 库在运行时可用;Perry 原生支持其中一个子集,按需启用 V8 覆盖其余部分。
- +成熟的打包工具链(electron-builder、electron-updater、代码签名辅助工具)拥有广泛的社区支持。
- +Web 原生特性如 devtools、热重载,以及 CSS/HTML 的流畅迭代速度,都无可匹敌。
何时选择 Perry
如果你想要小体积的原生二进制、低内存占用、各平台原生外观与体感,或者想要一份 TypeScript 代码同时交付到桌面之外的移动/手表/TV,就选 Perry。
何时选择 Electron
如果你已有现成的 Web UI,并想以最少的改写把它作为桌面应用交付;如果你需要桌面端最大化的跨平台 UI 一致性;或者你的运行时依赖广泛的纯 JS 库,就选 Electron。
结论
Electron 与 Perry 处在跨平台谱系的两端。Electron 用更大的二进制和更高的内存换取 Web 技术复用;Perry 用放弃 Web 技术栈换取原生二进制与原生 UI。如果你眼睁睁看着 Electron 应用安装包涨到 150 MB 以上、空闲内存涨到半个 GB,Perry 正是为那个具体问题准备的答案——代价是换上一种不一样的、原生风格的 UI 模型。