返回对比页
跨平台 UI

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。

并排对比

特性PerryElectron
渲染原生平台组件(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 风格的声明式 APIHTML/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 模型。

试用 Perry

今天就把你的 TypeScript 编译为原生代码。

开始使用