Perry 对比 Tauri
Tauri 是一个用于构建跨平台桌面(以及越来越多移动端)应用的框架,后端用 Rust,前端跑在操作系统内置的 webview 中——Windows 上的 WebView2、macOS 上的 WKWebView、Linux 上的 WebKitGTK。因为不打包系统 webview,Tauri 应用比 Electron 小得多。Perry 走的是另一条路:完全不用 webview,不渲染 HTML,只把 TypeScript 编译为驱动真正平台组件的原生机器码。
什么是 Tauri?
Tauri 是一个用 Rust 编写的开源框架,让你用 Web 前端(任意框架——React、Vue、Svelte 等)和 Rust 后端构建跨平台应用。它不打包 Chromium,而是使用系统内置的 webview,因此在 Linux/Windows/macOS 上的应用安装包通常在个位数 MB 量级。Tauri 2 增加了对移动端(iOS 与 Android)的支持。前端由系统 webview 以 HTML/CSS/JS 渲染;与 Rust 后端的通信通过一个 IPC 桥进行。
什么是 Perry?
Perry 通过 LLVM 把 TypeScript 直接编译为原生机器码。UI 层(perry/ui)是一套 SwiftUI 风格的声明式 API,映射到原生平台组件——而不是由 webview 渲染的 HTML。Perry 写的应用既不携带 JavaScript 引擎,也不跑在 WebKit/WebView2 里,更不需要 UI 与逻辑之间的 IPC 桥。Perry 面向 10 个平台,包括移动、手表和 TV。
并排对比
| 特性 | Perry | Tauri |
|---|---|---|
| UI 渲染 | 原生平台组件(AppKit、UIKit、GTK4、Win32、JNI) | 系统 webview(WKWebView、WebView2、WebKitGTK)——HTML/CSS/JS |
| 前端语言 | TypeScript(声明式组件 API) | 通过任意 Web 框架(React、Vue 等)使用 HTML/CSS/JS |
| 后端语言 | TypeScript | Rust |
| UI 与逻辑之间的 IPC | 无——单进程,直接调用 | 必需(UI 在 webview,逻辑在 Rust 进程中) |
| hello world 安装包 | 约 330 KB | 约 3–10 MB(webview 由 OS 提供) |
| 移动(iOS、Android) | 支持——原生 UI | 支持——基于 webview(Tauri 2) |
| Watch / TV | watchOS、tvOS、Wear OS | 不支持 |
| WebAssembly 目标 | 支持(perry/ui 通过 DOM 桥) | 不适用(Tauri 自身原生使用 webview) |
| 成熟度 | Pre-1.0 | 稳定(1.x / 2.x) |
Perry 胜出之处
- +真正的原生 UI——Perry 不渲染 HTML,而是直接驱动真正的平台组件,因此应用会自动获得原生滚动手感、焦点、可访问性、IME 与系统主题。
- +更小的 hello world(约 330 KB,相对 Tauri 的个位数 MB),且运行时不依赖系统 webview。
- +单一语言、单一进程。整个应用——UI 与逻辑——都是 TypeScript,没有需要设计或调试的 IPC 桥。
- +watchOS、tvOS、Wear OS,以及一个走真正原生编译流水线的 Web/JS 目标,而不是被打包的 webview。
- +不同平台之间没有 webview 行为差异。Tauri 会继承 WKWebView vs WebView2 vs WebKitGTK 的怪癖;Perry 在每个 OS 上都走原生组件路径。
- +计算性能是 AOT 原生而非 webview 中的 JIT。在 M1 Max 的匹配条件下,Perry 在计算微基准上领先(perry/benchmarks)。
Tauri 胜出之处
- +成熟、稳定的框架,2.x 线积极活跃,社区庞大。
- +前端灵活——可以使用你已经熟悉的任意 Web 框架(React、Vue、Svelte、Solid 等)。
- +因为依赖系统提供的 webview 而非打包 Chromium,安装包比 Electron 小很多。
- +如果你需要做系统级工作(文件系统、原生 API)并希望在那一侧获得编译期保证,Rust 后端是理想选择。
- +webview 渲染意味着 CSS/HTML 的迭代速度与 devtools 都符合 Web 开发者的预期。
- +成熟的打包、代码签名与更新器流水线。
何时选择 Perry
如果你想要真正的原生 UI(而不是 webview 里渲染的 HTML),想要不依赖 webview 的小体积原生二进制,想要一份 TypeScript 代码覆盖桌面 + 移动 + 手表 + TV,或者想要在编译期被验证的跨平台组件代码,就选 Perry。
何时选择 Tauri
如果你已有或计划做 Web 前端,想要一个由 Rust 支撑的小安装包桌面应用,乐于用 HTML/CSS 做 UI,或者想要 Web 框架与工具的广阔生态,就选 Tauri。
结论
Tauri 是一个“好得多的 Electron”——同样的 Web 技术思路,但因为不打包系统 webview,安装包显著更小。但它本质上仍是基于 webview 的架构,意味着 HTML/CSS/JS 渲染与 IPC 桥。Perry 的立场不同:完全不用 webview,使用原生平台组件,单进程。如果你想保留 Web 技术栈但比 Electron 更小,Tauri 是正确答案;如果你想离开 Web 技术栈、用 TypeScript 走原生组件路线,那答案是 Perry。