Perry vs Tauri
Tauri เป็นเฟรมเวิร์กสำหรับสร้างแอปเดสก์ท็อปข้ามแพลตฟอร์ม (และมือถือมากขึ้นเรื่อย ๆ) ด้วย backend Rust และ frontend ที่รันใน webview ในตัวของระบบปฏิบัติการ — WebView2 บน Windows, WKWebView บน macOS, WebKitGTK บน Linux แอป Tauri มีขนาดเล็กกว่า Electron มากเพราะไม่ได้บันเดิล webview ของ OS Perry เลือกเส้นทางที่แตกต่าง: ไม่มี webview เลย ไม่มีการเรนเดอร์ HTML มีเพียง TypeScript ที่คอมไพล์เป็นโค้ดเครื่องเนทีฟที่ขับวิดเจ็ตแพลตฟอร์มจริง
Tauri คืออะไร?
Tauri เป็นเฟรมเวิร์กโอเพนซอร์สที่เขียนด้วย Rust ซึ่งให้คุณสร้างแอปพลิเคชันข้ามแพลตฟอร์มด้วย frontend เว็บ (เฟรมเวิร์กใดก็ได้ — React, Vue, Svelte ฯลฯ) และ backend Rust แทนที่จะบันเดิล Chromium Tauri ใช้ webview ในตัวของระบบ ซึ่งทำให้ตัวติดตั้งแอปอยู่ในระดับเลขหลักเดียว MB บน Linux/Windows/macOS Tauri 2 เพิ่มการรองรับมือถือ (iOS และ Android) Frontend ถูกเรนเดอร์เป็น HTML/CSS/JS โดย webview ของระบบ; การสื่อสารกับ backend Rust ผ่านสะพาน IPC
Perry คืออะไร?
Perry คอมไพล์ TypeScript ตรงเป็นโค้ดเครื่องเนทีฟผ่าน LLVM เลเยอร์ UI (perry/ui) เป็น API declarative สไตล์ SwiftUI ที่แมปไปยังวิดเจ็ตแพลตฟอร์มเนทีฟ — ไม่ใช่ HTML ที่เรนเดอร์โดย webview แอปที่เขียนด้วย Perry ไม่ต้องแบก JavaScript engine ไม่รันใน WebKit/WebView2 และไม่ต้องการสะพาน IPC ระหว่าง UI กับ logic Perry รองรับ 10 แพลตฟอร์มรวมถึงมือถือ, watch และ TV
เคียงข้างกัน
| ฟีเจอร์ | Perry | Tauri |
|---|---|---|
| การเรนเดอร์ UI | วิดเจ็ตแพลตฟอร์มเนทีฟ (AppKit, UIKit, GTK4, Win32, JNI) | Webview ของระบบ (WKWebView, WebView2, WebKitGTK) — HTML/CSS/JS |
| ภาษา Frontend | TypeScript (declarative widget API) | HTML/CSS/JS ผ่านเฟรมเวิร์กเว็บใด ๆ (React, Vue ฯลฯ) |
| ภาษา Backend | TypeScript | Rust |
| IPC ระหว่าง UI กับ logic | ไม่มี — โพรเซสเดียว เรียกตรง | จำเป็น (UI ใน webview, logic ในโพรเซส 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) | N/A (ตัว Tauri เองใช้ webview แบบเนทีฟ) |
| ความสมบูรณ์ | Pre-1.0 | เสถียร (1.x / 2.x) |
จุดที่ Perry ชนะ
- +UI เนทีฟอย่างแท้จริง — Perry ไม่เรนเดอร์ HTML; แต่ขับวิดเจ็ตแพลตฟอร์มจริง แอปจึงสืบทอด scroll physics, focus, accessibility, IME และ theming ของ OS โดยอัตโนมัติ
- +Hello-world ขนาดเล็กกว่า (~330 KB เทียบกับเลขหลักเดียว MB ของ Tauri) และไม่ต้องพึ่ง webview ของระบบที่รันไทม์
- +ภาษาเดียว โพรเซสเดียว ทั้งแอป — UI และ logic — เป็น TypeScript โดยไม่มีสะพาน IPC ที่ต้องออกแบบหรือ debug
- +watchOS, tvOS, Wear OS และเป้าหมาย Web/JS เต็มรูปแบบพร้อม pipeline การคอมไพล์เนทีฟจริง ไม่ใช่ webview ที่บันเดิลมา
- +ไม่มีพฤติกรรม webview ที่แตกต่างกันระหว่างแพลตฟอร์ม Tauri สืบทอดความแปลกของ WKWebView vs WebView2 vs WebKitGTK; Perry เลือกเส้นทาง widget เนทีฟบนแต่ละ OS
- +ประสิทธิภาพการคำนวณเป็นแบบ AOT-เนทีฟ ไม่ใช่ webview-JIT Perry นำใน microbenchmark การคำนวณภายใต้เงื่อนไขที่เทียบเท่ากันบน M1 Max (perry/benchmarks)
จุดที่ Tauri ชนะ
- +เฟรมเวิร์กที่สมบูรณ์และเสถียรพร้อมสาย 2.x ที่กำลังเติบโตและชุมชนขนาดใหญ่
- +ความยืดหยุ่นของ frontend — ใช้เฟรมเวิร์กเว็บใด ๆ (React, Vue, Svelte, Solid ฯลฯ) ที่คุณรู้จักอยู่แล้ว
- +ตัวติดตั้งเล็กกว่า Electron เพราะ Tauri พึ่ง webview ที่ OS จัดให้แทนที่จะบันเดิล Chromium
- +Backend Rust เหมาะสมถ้าคุณมีงานระดับระบบ (filesystem, API เนทีฟ) และต้องการการรับประกันระดับ compile-time ตรงนั้น
- +การเรนเดอร์ webview หมายความว่าความเร็วในการ iterate CSS/HTML และ devtools ทำงานเหมือนที่คุณคาดหวังจากการพัฒนาเว็บ
- +Pipeline การแพ็กเกจ การลงนามโค้ด และตัวอัปเดตที่ตั้งหลักแล้ว
เมื่อใดควรเลือก Perry
เลือก Perry ถ้าคุณต้องการ UI เนทีฟอย่างแท้จริง (ไม่ใช่ HTML ที่เรนเดอร์ใน webview) ไบนารีเนทีฟขนาดเล็กที่ไม่ต้องพึ่ง webview โค้ดเบส TypeScript เดียวข้ามเดสก์ท็อป + มือถือ + watch + TV หรือโค้ด widget ข้ามแพลตฟอร์มที่ตรวจสอบได้ในเวลาคอมไพล์
เมื่อใดควรเลือก Tauri
เลือก Tauri ถ้าคุณมี frontend เว็บอยู่แล้วหรือวางแผนจะมี ต้องการแอปเดสก์ท็อปที่ใช้ Rust backend ตัวติดตั้งเล็ก พอใจกับ HTML/CSS สำหรับ UI หรือต้องการระบบนิเวศกว้างของเฟรมเวิร์กและเครื่องมือเว็บ
บทสรุป
Tauri เป็น Electron ที่ดีกว่ามาก — แนวทาง web-tech แบบเดียวกัน ตัวติดตั้งเล็กกว่ามากเพราะไม่ได้บันเดิล webview ของ OS แต่ก็ยังเป็นสถาปัตยกรรมอิง webview ซึ่งหมายถึงการเรนเดอร์ HTML/CSS/JS และสะพาน IPC Perry มีจุดยืนที่แตกต่าง: ไม่มี webview เลย วิดเจ็ตแพลตฟอร์มเนทีฟ โพรเซสเดียว ถ้าคุณต้องการคง web stack ไว้พร้อมไบนารีที่เล็กกว่า Electron Tauri คือคำตอบที่ถูกต้อง ถ้าคุณต้องการทิ้ง web stack เพื่อไปสู่วิดเจ็ตเนทีฟใน TypeScript Perry คือคำตอบ