Perry vs Electron
Electron ให้คุณสร้างแอปเดสก์ท็อปข้ามแพลตฟอร์มโดยใช้เทคโนโลยีเว็บ (HTML/CSS/JS) ด้วยการบันเดิล Chromium และ Node.js ไปกับแอปของคุณ Perry คอมไพล์ TypeScript ตรงเป็นโค้ดเครื่องเนทีฟและเรนเดอร์ UI ผ่านวิดเจ็ตแพลตฟอร์มจริง — AppKit, UIKit, GTK4, Win32, JNI จุดขายของ Electron คือการนำเทคโนโลยีเว็บกลับมาใช้; จุดขายของ Perry คือไบนารีเนทีฟขนาดเล็กพร้อม UI เนทีฟจาก TypeScript
Electron คืออะไร?
Electron เป็นเฟรมเวิร์กโอเพนซอร์สสำหรับสร้างแอปพลิเคชันเดสก์ท็อปข้ามแพลตฟอร์มโดยใช้ Chromium สำหรับการเรนเดอร์และ Node.js สำหรับการเข้าถึงระบบ แต่ละแอป Electron จะส่งมอบสำเนา Chromium และ Node ของตัวเอง ซึ่งเป็นเหตุผลที่ตัวติดตั้งแอป Electron มักมีขนาด 80–150 MB แม้สำหรับ hello world Electron ขับเคลื่อนแอปที่ใช้กันอย่างแพร่หลายรวมถึง VS Code, Slack, Discord และ Figma desktop รองรับเดสก์ท็อป Linux, macOS และ Windows; ไม่มี story หลักสำหรับมือถือ, watch หรือ TV
Perry คืออะไร?
Perry คอมไพล์ TypeScript ตรงเป็นโค้ดเครื่องเนทีฟโดยไม่มี browser engine ไม่มี Chromium และไม่มีรันไทม์ Node เลเยอร์ UI (perry/ui) เป็นระบบ declarative สไตล์ SwiftUI ที่แมปไปยังวิดเจ็ตแพลตฟอร์มเนทีฟผ่าน AppKit บน macOS, UIKit บน iOS/iPadOS/tvOS, GTK4 บน Linux, Win32 บน Windows และ JNI บน Android ไบนารี hello-world มีขนาด ~330 KB; แอปครบเครื่องพร้อม stdlib (Fastify, mysql2 ฯลฯ) มีขนาดราว 48 MB
เคียงข้างกัน
| ฟีเจอร์ | Perry | Electron |
|---|---|---|
| การเรนเดอร์ | วิดเจ็ตแพลตฟอร์มเนทีฟ (AppKit, UIKit, GTK4, Win32, JNI) | Chromium ที่บันเดิลมา (HTML/CSS/JS) |
| Engine ที่บันเดิล | ไม่มี (V8 เสริมเฉพาะเมื่อ --enable-js-runtime) | Chromium + Node.js |
| ขนาดตัวติดตั้ง hello-world | ~330 KB | ~80–150 MB |
| ตัวติดตั้งแอปครบเครื่อง (stdlib + framework) | ~48 MB | 100–200+ MB โดยทั่วไป |
| การใช้ RAM | เนทีฟ (โดยทั่วไป: หลายสิบ MB) | หลายโพรเซส Chromium (โดยทั่วไป: หลายร้อย MB) |
| มือถือ / watch / TV | ใช่ — iOS, iPadOS, Android, watchOS, tvOS, Wear OS | ไม่ (เดสก์ท็อปเท่านั้น) |
| ภาษา UI | TypeScript พร้อม API declarative สไตล์ SwiftUI | HTML/CSS/JS (web stack) |
| Auto-update / packaging | perry publish (Homebrew, APT, App Store, Play Store) | electron-builder, electron-updater (ระบบนิเวศที่สมบูรณ์) |
| ความสมบูรณ์ | Pre-1.0 | เสถียร, ในโปรดักชันมากกว่าทศวรรษ |
จุดที่ Perry ชนะ
- +ขนาดไบนารี Perry hello world มีขนาด ~330 KB; Electron hello world มักมีขนาด 80–150 MB เพราะทุกแอปส่งมอบ Chromium ของตัวเอง
- +รอยเท้าหน่วยความจำ แอป Perry ทำงานเป็นโพรเซสเนทีฟเดียว; แอป Electron รันโพรเซส Chromium หลายตัว (renderer, GPU, utility ฯลฯ) และใช้ RAM หลายร้อย MB ตอน idle
- +รูปลักษณ์และความรู้สึกแบบเนทีฟ Perry เรนเดอร์ผ่านวิดเจ็ตแพลตฟอร์มจริง แอปจึงสืบทอด convention ของ OS (focus ring, accessibility, IME, scrolling physics) โดยอัตโนมัติ
- +มือถือ, watch, TV โค้ดเบส Perry หนึ่งคอมไพล์เป็น iOS/iPadOS/Android/watchOS/tvOS/Wear OS Electron เป็นเดสก์ท็อปเท่านั้น
- +Cold start ไบนารีเนทีฟไม่ต้องจ่ายต้นทุนการเริ่มต้นของ Chromium และ Node
- +ประสิทธิภาพ CPU จริงบนโค้ดที่กระชับ Perry นำใน microbenchmark การคำนวณเทียบกับ Node (ที่ Electron ใช้) หลายเท่าใน kernel ส่วนใหญ่ (ดู perry/benchmarks)
จุดที่ Electron ชนะ
- +ความสมบูรณ์ Electron อยู่ในโปรดักชันมากว่าทศวรรษและขับเคลื่อน VS Code, Slack, Discord และแอปอื่น ๆ อีกมากด้วยเครื่องมือที่ผ่านการพิสูจน์
- +การนำ web stack กลับมาใช้ ถ้าทีมของคุณสร้าง UI เว็บอยู่แล้ว Electron ให้คุณส่งมอบเป็นแอปเดสก์ท็อปได้โดยไม่ต้องเขียนใหม่
- +ความสอดคล้องของ UI ข้ามแพลตฟอร์มทำได้ง่าย — Chromium เรนเดอร์เหมือนกันบนทุก OS ซึ่งเป็นสิ่งที่ผลิตภัณฑ์บางตัวต้องการ
- +ระบบนิเวศ npm library อันมหาศาลทำงานได้ที่รันไทม์; Perry รันบางส่วนแบบเนทีฟและ V8 แบบ opt-in ครอบคลุมส่วนที่เหลือ
- +เครื่องมือแพ็กเกจที่สมบูรณ์ (electron-builder, electron-updater, ตัวช่วยลงนามโค้ด) พร้อมการสนับสนุนจากชุมชนกว้างขวาง
- +ฟีเจอร์ web-native เช่น devtools, hot reload และความเร็วในการ iterate CSS/HTML ไม่มีคู่แข่ง
เมื่อใดควรเลือก Perry
เลือก Perry ถ้าคุณต้องการไบนารีเนทีฟขนาดเล็ก การใช้หน่วยความจำต่ำ รูปลักษณ์และความรู้สึกแบบเนทีฟต่อแพลตฟอร์ม หรือโค้ดเบส TypeScript เดียวที่ส่งมอบไปยังมือถือ/watch/TV นอกเหนือจากเดสก์ท็อป
เมื่อใดควรเลือก Electron
เลือก Electron ถ้าคุณมี UI เว็บอยู่แล้วและต้องการส่งมอบเป็นแอปเดสก์ท็อปโดยเขียนใหม่น้อยที่สุด ถ้าคุณต้องการความสอดคล้องของ UI ข้ามแพลตฟอร์มสูงสุดบนเดสก์ท็อป หรือถ้าคุณพึ่งพา library JS ล้วนหลากหลายที่รันไทม์
บทสรุป
Electron และ Perry อยู่ปลายตรงข้ามของสเปกตรัมข้ามแพลตฟอร์ม Electron แลกขนาดไบนารีและหน่วยความจำกับการนำเทคโนโลยีเว็บกลับมาใช้; Perry แลก web stack กับไบนารีเนทีฟและ UI เนทีฟ ถ้าคุณเคยเห็นตัวติดตั้งแอป Electron ของคุณบวมเกิน 150 MB หรือ RAM ตอน idle เกินครึ่งกิกะไบต์ Perry คือคำตอบสำหรับปัญหานั้นโดยเฉพาะ — โดยแลกกับโมเดล UI สไตล์เนทีฟที่แตกต่าง