กลับไปยังการเปรียบเทียบ
รันไทม์ TypeScript

Perry vs Bun

Bun เป็นชุดเครื่องมือ JavaScript/TypeScript แบบออลอินวันที่รวมรันไทม์, bundler, package manager และ test runner เข้าด้วยกัน และยังสามารถสร้างไฟล์ปฏิบัติการไฟล์เดียวได้โดยรวมรันไทม์ของตัวเองเข้ากับโค้ดของคุณ Perry เลือกเส้นทางที่แตกต่าง: คอมไพล์ TypeScript ตรงเป็นโค้ดเครื่องเนทีฟผ่าน LLVM — ไม่มี JavaScript engine ในไบนารี ไม่มีรันไทม์ มีเพียงไฟล์ปฏิบัติการเนทีฟขนาดเล็ก Bun และ Perry เห็นพ้องในเรื่องเอาต์พุต TS-to-binary แต่เห็นต่างว่าใน binary นั้นควรมี JavaScript engine หรือไม่

Bun คืออะไร?

Bun เป็นชุดเครื่องมือ JavaScript และ TypeScript ออลอินวันที่รวดเร็ว สร้างด้วย Zig รันไฟล์ `.ts` ได้โดยตรง (ไม่ต้องคอมไพล์ก่อน) ใช้ JavaScriptCore เป็น JS engine และมาพร้อม bundler, package manager และ test runner คำสั่ง `bun build --compile` รวมรันไทม์ Bun เข้ากับแอปพลิเคชันของคุณเป็นไฟล์ปฏิบัติการเดียว Bun รองรับ Linux, macOS และ Windows บน x64 และ arm64

Perry คืออะไร?

Perry เป็นคอมไพเลอร์ TypeScript เนทีฟที่เขียนด้วย Rust คอมไพล์ TypeScript ตรงเป็นโค้ดเครื่องเนทีฟผ่าน LLVM — ไม่มี JavaScript engine ไม่มีรันไทม์ ไม่มี JIT เอาต์พุตเป็นไบนารีไฟล์เดียว (ราว 330 KB สำหรับ hello world; ราว 48 MB สำหรับแอปที่ใช้ stdlib เต็มรูปแบบเช่นเซิร์ฟเวอร์ Fastify) Perry รองรับ 10 แพลตฟอร์มรวมถึง macOS, iOS, iPadOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly และเว็บ

เคียงข้างกัน

ฟีเจอร์PerryBun
เอาต์พุตโค้ดเครื่องเนทีฟ (LLVM)โค้ดของคุณ + รันไทม์ Bun รวมในไบนารีเดียว
JavaScript engine ในไบนารีไม่มีโดยค่าเริ่มต้น; V8 เสริมด้วย --enable-js-runtime (+~15 MB)JavaScriptCore เสมอ
ขนาดไบนารี hello-world~330 KB~50–100 MB (รวมรันไทม์ Bun)
JITไม่มี (คอมไพล์แบบ AOT)มี (JavaScriptCore JIT)
เป้าหมายมือถือ (iOS, Android)ใช่ — UI เนทีฟผ่าน UIKit/JNIไม่
เป้าหมาย Watch / TVwatchOS, tvOS, Wear OSไม่
วิดเจ็ต UI เนทีฟ25+ ผ่าน AppKit, UIKit, GTK4, Win32, JNIไม่ (มุ่งเน้น server/CLI)
ระบบนิเวศ npmแพ็กเกจ TS/JS ล้วนคอมไพล์เนทีฟได้; แพ็กเกจอื่นผ่าน V8 เสริมnpm ที่เข้ากันได้กับ Node เต็มรูปแบบ
ความเสถียรPre-1.0 (alpha)เสถียร (1.x)
สร้างด้วยRustZig

จุดที่ Perry ชนะ

  • +ไบนารีขนาดเล็กกว่า — Perry hello world มีขนาด ~330 KB; Bun --compile hello world รวมรันไทม์ Bun และมีขนาดในระดับสิบ MB
  • +ไม่มีต้นทุน JavaScript engine ไบนารีที่คอมไพล์ด้วย Perry ไม่มี interpreter หรือ JIT — TypeScript ของคุณคือไฟล์ปฏิบัติการ
  • +มือถือ, watch และ TV Perry คอมไพล์เป็น iOS, iPadOS, Android, watchOS, tvOS และ WebAssembly Bun เป็น server/desktop เท่านั้น
  • +UI เนทีฟ โมดูล perry/ui ของ Perry คอมไพล์เป็นวิดเจ็ตแพลตฟอร์มจริง (AppKit บน macOS, UIKit บน iOS, GTK4 บน Linux, Win32 บน Windows, JNI บน Android) Bun ไม่มี story ด้าน UI
  • +เร็วกว่าใน microbenchmark ด้านการคำนวณส่วนใหญ่ภายใต้เงื่อนไขที่เทียบเท่ากันบน M1 Max (RUNS=11, v0.5.279, 2026-04-25): fibonacci 318 ms vs Bun 589 ms; object_create 1 ms vs 6 ms; nested_loops 18 ms vs 21 ms ดูตารางเต็มที่ perry/benchmarks
  • +เร็วกว่าใน JSON validate-and-roundtrip ในกลุ่ม dynamic typing: lazy JSON tape ของ Perry ทำได้ค่ากลาง 75 ms vs 259 ms ของ Bun บน workload 10k record เดียวกัน

จุดที่ Bun ชนะ

  • +รันไทม์ที่เสถียรและสมบูรณ์พร้อมรุ่น 1.x Perry ยังเป็น pre-1.0
  • +เร็วกว่าใน JSON parse-and-iterate (เมื่อต้องเข้าถึงทุกค่า): Bun 254 ms vs Perry 466 ms ค่ากลางบน workload เดียวกัน — lazy tape ของ Perry ไม่สามารถข้ามขั้นตอนได้เมื่อถูกบังคับให้ iterate
  • +ระบบนิเวศ npm ที่เข้ากันได้กับ Node เต็มรูปแบบทันทีที่ติดตั้ง Perry รันบางส่วนแบบเนทีฟและกลับไปใช้ V8 ฝังในตัวเป็นทางเลือกสำหรับส่วนที่เหลือ
  • +Test runner, bundler และ package manager ในตัว Perry เป็นคอมไพเลอร์ — เครื่องมือเสริมแยกต่างหาก
  • +ประสิทธิภาพ JIT-warm สามารถแซง AOT บนโค้ดที่มีการ iterate หนักและมี hot inner loop; Perry ไม่มี JIT
  • +เสมอกับ Perry ภายใน noise ระหว่างการรันบน `loop_data_dependent` (232 ms vs 235 ms) — kernel f64 ที่ไม่สามารถพับรวมได้จริง ๆ ที่คอมไพเลอร์ทั้งสองฝั่งไม่สามารถจัดเรียงใหม่ได้ ที่มา: perry/benchmarks RUNS=11

เมื่อใดควรเลือก Perry

เลือก Perry เมื่อขนาดไบนารีมีความสำคัญ (การกระจายมือถือ, บริบทแบบฝัง, cold start ที่รวดเร็ว) เมื่อคุณต้องการส่งมอบไปยังมือถือ/watch/TV จากโค้ดเบส TypeScript เดียว เมื่อคุณต้องการวิดเจ็ต UI เนทีฟ หรือเมื่อคุณไม่ต้องการมี JavaScript engine ในไบนารีที่ส่งมอบเลย

เมื่อใดควรเลือก Bun

เลือก Bun เมื่อคุณต้องการรันไทม์ที่เสถียรและสมบูรณ์ในวันนี้ เมื่อความเข้ากันได้กับ npm เต็มรูปแบบเป็นเรื่องจำเป็น เมื่อคุณต้องการเครื่องมือเดียวสำหรับรันไทม์ + bundler + package manager + test runner หรือเมื่อประสิทธิภาพ JIT-warm บน workload ที่รันยาวนานสำคัญสำหรับคุณมากกว่าขนาด cold start

บทสรุป

Bun และ Perry ต่างก็ให้คุณส่งมอบโปรแกรม TypeScript เป็นไบนารีเดียวได้ แต่ตอบโจทย์ที่แตกต่างกัน ไบนารีของ Bun มีรันไทม์ Bun และเหมาะกับ workload backend/CLI ที่ JIT และความเข้ากันได้กับ Node เต็มรูปแบบเป็นจุดแข็ง ไบนารีของ Perry ไม่มี JS engine และเหมาะกับขนาด, cold start, มือถือ และ UI เนทีฟ ถ้าคุณกำลังส่งมอบเซิร์ฟเวอร์ Bun ผ่านการพิสูจน์มามากกว่าในวันนี้ ถ้าคุณกำลังส่งมอบแอปเนทีฟหรือสนใจขนาดไบนารี Perry ถูกสร้างมาเพื่อกรณีนั้น

ลองใช้ Perry

คอมไพล์ TypeScript ของคุณเป็นเนทีฟวันนี้

เริ่มต้น