Perry vs Electron
Electron cho phép bạn xây dựng ứng dụng desktop đa nền tảng bằng công nghệ web (HTML/CSS/JS) bằng cách đóng gói Chromium và Node.js cùng ứng dụng. Perry biên dịch TypeScript trực tiếp thành mã máy gốc và render UI qua widget nền tảng thực sự — AppKit, UIKit, GTK4, Win32, JNI. Lập trường của Electron là tái sử dụng công nghệ web; lập trường của Perry là binary gốc nhỏ với UI gốc từ TypeScript.
Electron là gì?
Electron là một framework mã nguồn mở để xây dựng ứng dụng desktop đa nền tảng, sử dụng Chromium để render và Node.js để truy cập hệ thống. Mỗi ứng dụng Electron đi kèm bản sao Chromium và Node của riêng nó, đó là lý do trình cài đặt Electron thường có kích thước 80–150 MB ngay cả với hello world. Electron đã hỗ trợ các ứng dụng được sử dụng rộng rãi bao gồm VS Code, Slack, Discord và client desktop của Figma. Nó nhắm đến desktop Linux, macOS và Windows; không có giải pháp di động, watch hay TV chính thức.
Perry là gì?
Perry biên dịch TypeScript trực tiếp thành mã máy gốc, không có engine trình duyệt, không có Chromium và không có runtime Node. Lớp UI (perry/ui) là một hệ thống khai báo kiểu SwiftUI ánh xạ đến widget nền tảng gốc qua AppKit trên macOS, UIKit trên iOS/iPadOS/tvOS, GTK4 trên Linux, Win32 trên Windows và JNI trên Android. Binary hello-world chỉ ~330 KB; ứng dụng đầy đủ với stdlib (Fastify, mysql2, v.v.) khoảng 48 MB.
So sánh song song
| Tính năng | Perry | Electron |
|---|---|---|
| Render | Widget nền tảng gốc (AppKit, UIKit, GTK4, Win32, JNI) | Chromium đóng gói (HTML/CSS/JS) |
| Engine đóng gói | Không có (chỉ V8 tùy chọn khi --enable-js-runtime) | Chromium + Node.js |
| Kích thước trình cài đặt hello-world | ~330 KB | ~80–150 MB |
| Trình cài đặt ứng dụng đầy đủ (stdlib + framework) | ~48 MB | Thông thường 100–200+ MB |
| Sử dụng RAM | Gốc (thông thường: hàng chục MB) | Nhiều tiến trình Chromium (thông thường: hàng trăm MB) |
| Di động / watch / TV | Có — iOS, iPadOS, Android, watchOS, tvOS, Wear OS | Không (chỉ desktop) |
| Ngôn ngữ UI | TypeScript với API khai báo kiểu SwiftUI | HTML/CSS/JS (web stack) |
| Tự động cập nhật / đóng gói | perry publish (Homebrew, APT, App Store, Play Store) | electron-builder, electron-updater (hệ sinh thái trưởng thành) |
| Độ trưởng thành | Trước 1.0 | Ổn định, hơn một thập kỷ trong sản xuất |
Perry thắng ở đâu
- +Kích thước binary. Hello world của Perry ~330 KB; hello world Electron thường 80–150 MB vì mỗi ứng dụng đi kèm Chromium riêng.
- +Dấu chân bộ nhớ. Ứng dụng Perry chạy như một tiến trình gốc duy nhất; ứng dụng Electron chạy nhiều tiến trình Chromium (renderer, GPU, utility, v.v.) và tiêu thụ hàng trăm MB RAM khi nhàn rỗi.
- +Diện mạo và cảm giác gốc. Perry render qua widget nền tảng thực sự, vì vậy ứng dụng kế thừa các quy ước OS (focus ring, accessibility, IME, vật lý cuộn) tự động.
- +Di động, watch, TV. Một mã nguồn Perry biên dịch sang iOS/iPadOS/Android/watchOS/tvOS/Wear OS. Electron chỉ desktop.
- +Khởi động nguội. Binary gốc không trả chi phí khởi động Chromium và Node.
- +Hiệu năng CPU thực sự trên mã chặt chẽ. Perry dẫn đầu microbench tính toán so với Node (mà Electron sử dụng) gấp nhiều lần trên hầu hết kernel (xem perry/benchmarks).
Electron thắng ở đâu
- +Độ trưởng thành. Electron đã ở sản xuất hơn một thập kỷ và hỗ trợ VS Code, Slack, Discord và nhiều ứng dụng khác với công cụ đã được thử thách.
- +Tái sử dụng web stack. Nếu nhóm của bạn đã xây dựng UI web, Electron cho phép bạn xuất bản chúng dưới dạng ứng dụng desktop mà không cần viết lại.
- +Tính nhất quán UI giữa các nền tảng dễ dàng — Chromium render giống nhau trên mọi OS, đó chính xác là điều một số sản phẩm muốn.
- +Hệ sinh thái rộng lớn các thư viện npm hoạt động tại runtime; Perry chạy gốc một tập con và V8 tùy chọn bao phủ phần còn lại.
- +Công cụ đóng gói trưởng thành (electron-builder, electron-updater, trình hỗ trợ ký mã) với hỗ trợ cộng đồng rộng.
- +Các tính năng web-native như devtools, hot reload và tốc độ lặp CSS/HTML mượt mà không gì sánh được.
Khi nào nên chọn Perry
Chọn Perry nếu bạn muốn binary gốc nhỏ, sử dụng bộ nhớ thấp, diện mạo và cảm giác gốc theo từng nền tảng, hoặc một mã nguồn TypeScript duy nhất xuất bản đến di động/watch/TV ngoài desktop.
Khi nào nên chọn Electron
Chọn Electron nếu bạn có UI web hiện có và muốn xuất bản nó dưới dạng ứng dụng desktop với việc viết lại tối thiểu, nếu bạn cần tính nhất quán UI đa nền tảng tối đa trên desktop, hoặc nếu bạn phụ thuộc vào nhiều thư viện JS thuần tại runtime.
Kết luận
Electron và Perry nằm ở hai đầu đối lập của phổ đa nền tảng. Electron đánh đổi kích thước binary và bộ nhớ lấy tái sử dụng công nghệ web; Perry đánh đổi web stack lấy binary gốc và UI gốc. Nếu bạn đã thấy trình cài đặt Electron của mình phình lên hơn 150 MB hoặc RAM nhàn rỗi của nó vượt nửa gigabyte, Perry là câu trả lời cho vấn đề cụ thể đó — với cái giá là một mô hình UI khác, kiểu gốc.