6 คะแนน โดย GN⁺ 2024-04-02 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

รองรับ Windows

  • สามารถรัน Bun บน Windows 10 ขึ้นไปได้
  • ผ่าน 98% ของชุดทดสอบ Bun บน macOS และ Linux
  • มาพร้อมตัวจัดการแพ็กเกจที่เข้ากันได้กับ npm ในตัว ทำให้ติดตั้งแอป Vite React ได้เร็วกว่า yarn 18 เท่า และเร็วกว่า npm 30 เท่า
  • รองรับการรันสคริปต์บน Windows ได้เร็วขึ้นด้วยรูปแบบไฟล์ .bunx
  • ปรับแต่ง Node.js API ให้เหมาะกับ Windows โดยใช้ system call ที่เร็วที่สุด
    • ตัวอย่าง: fs.readdir() เร็วกว่า Node.js 58%

Bun คือ JavaScript runtime

  • รองรับ JavaScript, TypeScript และ JSX
  • เครื่องมือบรรทัดคำสั่งอย่าง tsc เร็วกว่า Bun 1.0 ได้สูงสุด 2 เท่า
  • ตอนนี้ Bun Shell กลายเป็นเชลล์ข้ามแพลตฟอร์มที่ใช้งานได้บน Windows ด้วย
    • มี core utility เช่น ls, rm, cat
    • สามารถรันเชลล์จาก JavaScript และ TypeScript ได้ผ่าน API Bun.$
  • Bun.Glob
    • มี Glob API ในตัวสำหรับจับคู่ไฟล์และสตริง
    • คล้ายกับ fast-glob และ micromatch แต่จับคู่สตริงได้เร็วกว่า 3 เท่า
  • Bun.Semver
  • API Semver ใหม่สำหรับแยกวิเคราะห์และจัดเรียงสตริง semver
    • คล้ายกับแพ็กเกจ node-semver แต่เร็วกว่า 20 เท่า
  • Bun.stringWidth()
    • API ใหม่สำหรับวัดความกว้างที่มองเห็นได้ของสตริงในเทอร์มินัล
    • รองรับ ANSI escape code, อักขระ full-width, grapheme และอีโมจิ
  • server.url : สามารถรับ URL ของ HTTP server ที่สร้างด้วย Bun.serve() ได้ผ่านพร็อพเพอร์ตี server.url
  • server.requestIP() : สามารถรับ IP address ของคำขอ HTTP ได้ผ่านเมธอด server.requestIP()
  • subprocess.resourceUsage() : สามารถเข้าถึงการใช้ CPU และหน่วยความจำของ subprocess ที่สร้างด้วย Bun.spawn() ได้ผ่านเมธอด resourceUsage()
  • ปรับปรุงความเข้ากันได้กับ Node.js
    • ปรับปรุง API หลายส่วน เช่น node:http2 client API, ความเข้ากันได้ของ Date.parse(), การรองรับ fs.readdir() แบบ recursive เป็นต้น
    • ทำ IPC ระหว่าง Bun และ Node.js ได้
    • รองรับ Node.js API บางส่วนที่ไม่มีเอกสารด้วย
  • Web API : รองรับ Web standard API เช่น WebSocket, performance.mark(), fetch() ที่ใช้การบีบอัด Brotli และ URL.canParse()

Bun คือ npm-compatible package manager

  • ใช้ bun install เพื่อติดตั้งแพ็กเกจ npm ได้เร็วขึ้นสูงสุด 29 เท่า
  • ปรับปรุงฟีเจอร์อย่าง lifecycle script, trustedDependencies, bun pm trust เป็นต้น

Bun คือ JavaScript bundler

  • รองรับการ bundle โค้ดที่รันบน Node.js ได้ด้วย bun build --target=node
  • สามารถคอมไพล์ไฟล์ TypeScript และ JavaScript เป็นไฟล์ executable เดี่ยวได้ด้วยแฟล็ก --compile

Bun คือ test runner

  • มีโมดูลทดสอบในตัวที่รองรับ API เดียวกับ Jest
  • เพิ่ม matcher ใหม่ให้ expect() และรองรับการ mock โมดูล

รองรับ SQLite ในตัว

  • รองรับ SQLite ด้วย API ที่ได้แรงบันดาลใจจาก better-sqlite3
  • ปรับปรุงการรองรับ multi-statement query, ข้อความแสดงข้อผิดพลาดแบบละเอียด, การนำเข้าฐานข้อมูล และความสามารถในตัว

ความเห็นจาก GN⁺

  • Bun เป็นชุดเครื่องมือ JavaScript ที่เพิ่มประสิทธิภาพอย่างมากพร้อมคงความเข้ากันได้กับ Node.js และการรองรับ Windows ทำให้เข้าถึงชุมชนนักพัฒนาได้กว้างขึ้น
  • test runner และการรองรับ SQLite ในตัวช่วยให้นักพัฒนาทำงานได้อย่างมีประสิทธิภาพโดยไม่ต้องพึ่งเครื่องมือเพิ่มเติม
  • ประสิทธิภาพที่รวดเร็วและประสบการณ์นักพัฒนาที่ดีขึ้นของ Bun อาจโดดเด่นเป็นพิเศษในโปรเจกต์ขนาดใหญ่หรือแอปพลิเคชันที่ไวต่อประสิทธิภาพ
  • แม้ Bun จะมีฟีเจอร์และการปรับปรุงหลากหลาย แต่การทำให้เข้ากันได้อย่างสมบูรณ์กับแพ็กเกจจำนวนมหาศาลใน ecosystem ของ Node.js ยังต้องอาศัยการพัฒนาอย่างต่อเนื่องและฟีดแบ็กจากชุมชน
  • จำเป็นต้องมีการวิเคราะห์เพิ่มเติมว่าฟีเจอร์ใหม่ของ Bun จะสามารถแข่งขันหรือทำงานร่วมกับเครื่องมือเดิมที่อิง Node.js ได้อย่างไร

1 ความคิดเห็น

 
GN⁺ 2024-04-02
ความคิดเห็นจาก Hacker News
  • รายการการเปลี่ยนแปลงที่น่าประทับใจของ Bun

    • Bun ดูเหมือนจะเป็นทางเลือกแทน Node.js ที่ยอดเยี่ยม และการทุ่มเวลาให้กับการรองรับ Windows ก็เป็นสิ่งที่มักถูกมองข้ามในโลกของการพัฒนาเว็บ
    • มีคำถามว่าคำพูดที่ว่า "Bun on Windows passes 98% of our own test suite for Bun on macOS and Linux." หมายความว่าเวอร์ชัน Windows ถูกปล่อยออกมาทั้งที่ยังมีเทสต์ที่ไม่ผ่านอยู่ หรือเป็นเพียงความเข้าใจผิด
  • ฟีเจอร์มาโครของ Bun

    • เพิ่งรู้ว่า Bun มีฟีเจอร์มาโครพื้นฐานที่รันโค้ดในขั้นตอน bundle time ซึ่งเป็นความสามารถที่น่าสนใจมาก
  • ข้อสงสัยเกี่ยวกับเหตุผลในการใช้ Bun และ Deno

    • แม้จะตระหนักว่า Bun และ Deno จำเป็นต้องเข้ากันได้กับ Node.js แต่ก็ยังมีข้อสงสัยเรื่องความยั่งยืนของผลิตภัณฑ์เมื่อมีเงินทุนจาก VC หนุนหลัง
    • แม้ว่า Bun และ Deno จะอยู่ใน ecosystem แบบเดียวกับ Node.js ซึ่งก็ยังไม่สมบูรณ์นัก แต่ก็ยังไม่แน่ใจว่ามีเหตุผลที่ชัดเจนอะไรในการเลือกใช้สองตัวนี้
  • แฟนตัวยงของ Bun

    • เริ่มใช้ Bun ครั้งแรกเพราะรองรับ TypeScript และยังคงใช้ต่อเพราะประสิทธิภาพ
    • เคยลอง Deno แต่ใช้งานยาก ขณะที่ Bun ผสานเข้ากับงานได้ง่ายและเป็นประสบการณ์ที่สนุกมาก
  • การประเมินรีลีสใหม่ของ Bun

    • ดูวิดีโอของ Bun แล้ว แต่กราฟไม่ชัดเจน จึงไม่รู้ว่ากำลังเปรียบเทียบกับ Bun เวอร์ชันก่อนหน้าหรือกับ Node.js
    • ประสบการณ์จากการใช้ Bun ในโปรเจกต์ส่วนตัวถือว่าดี และ API ที่มีมาให้ในตัวก็ทำงานได้ดี หวังว่า Deno และ Node.js จะนำ API บางส่วนเหล่านี้ไปใช้ด้วย
    • Bun เก็บ telemetry บางส่วนโดยค่าเริ่มต้น แต่สคริปต์ติดตั้งไม่ได้แจ้งเรื่องนี้ และมีการกล่าวถึงไว้แค่ในเอกสาร Bunfile เท่านั้น
    • อยากให้ผู้ใช้ได้รับคำแนะนำเกี่ยวกับวิธีปิด telemetry ระหว่างการติดตั้ง และเปิดให้เลือกใช้แบบ opt-in ได้
    • Bun มีตัวเลือกสำหรับ bundle entry point .js ของโปรเจกต์เข้ากับ runtime เพื่อสร้าง executable ที่ไม่มี dependencies ซึ่งมีประโยชน์เมื่ออยากแจกจ่ายไบนารีไฟล์เดียวให้ผู้ใช้ แต่ตอนนี้ขนาดไฟล์ยังค่อนข้างใหญ่ (มากกว่า 90MB สำหรับโปรเจกต์เล็กบน GNU/Linux)
    • สงสัยว่า Bun จะมีตัวเลือกให้ปิดฟีเจอร์บางอย่างเพื่อให้ได้ไบนารีขนาดเล็กลงหรือไม่
    • กำลังลองใช้ Bun เป็น target ของ Haxe ซึ่งน่าพิจารณาสำหรับคนที่ชอบ Haxe มากกว่า TypeScript หรืออยากเพิ่มเว็บเซิร์ฟเวอร์ให้กับโปรเจกต์ Haxe เดิม
  • คำขอต่อทีม Bun

    • มีคำขอให้ระบุนโยบายการซัพพอร์ต/ไทม์ไลน์วงจรชีวิตให้ชัดเจน และความชัดเจนเรื่องการรับประกันเสถียรภาพระหว่างเวอร์ชันและโมดูลก็สำคัญเช่นกัน
  • การมีส่วนร่วมของนักพัฒนา Bun

    • นักพัฒนา Bun ระบุว่าพร้อมตอบคำถาม และกล่าวว่า Bun v1.1 ยังอยู่ระหว่างการคอมไพล์ โดยจะใช้เวลาอีกราว 20 นาทีจึงจะเสร็จ
  • คำถามเกี่ยวกับเสถียรภาพของ Bun

    • เคยลองใช้ Bun สามครั้งในหลายโปรเจกต์ แต่พบว่าเกิด segmentation fault ระหว่าง runtime หรือระหว่างติดตั้งแพ็กเกจ
  • โมเดลรายได้และเงินทุน VC ของ Bun

    • มีคำถามว่าโมเดลรายได้ของ Bun คืออะไร และจะเกิดอะไรขึ้นหากเงินทุนจาก VC หมดลง