“เบื้องหลังความเร็วของ Bun Install — เมื่อการติดตั้งแพ็กเกจกลายเป็นงานระบบ ไม่ใช่แค่เรื่อง JavaScript”

ในโลกของนักพัฒนา JavaScript ที่เคยชินกับการรอ npm install จนกาแฟเย็น Bun ได้เข้ามาเปลี่ยนเกมด้วยความเร็วที่เหนือชั้น โดยเฉลี่ยเร็วกว่า npm ถึง 7 เท่า, pnpm 4 เท่า และ yarn 17 เท่า แต่เบื้องหลังความเร็วนี้ไม่ใช่แค่การเขียนโค้ดให้ดีขึ้น — มันคือการออกแบบใหม่ทั้งหมดในระดับระบบปฏิบัติการ

Bun มองการติดตั้งแพ็กเกจเป็น “ปัญหาด้านระบบ” มากกว่าปัญหา JavaScript โดยลดการใช้ system call ที่สิ้นเปลือง, ใช้การจัดเก็บข้อมูลแบบ binary, และใช้การคัดลอกไฟล์แบบ native ที่เร็วกว่าเดิมหลายเท่า นอกจากนี้ยังใช้ multi-threading เต็มรูปแบบเพื่อให้ทุก core ของ CPU ทำงานพร้อมกัน ต่างจาก npm ที่ใช้แค่ thread เดียว

Bun เขียนด้วยภาษา Zig ซึ่งสามารถเรียก system call ได้โดยตรง โดยไม่ต้องผ่าน libuv หรือ event loop แบบ Node.js ทำให้การอ่านไฟล์หรือจัดการเครือข่ายเร็วขึ้นอย่างเห็นได้ชัด และยังใช้เทคนิคเช่น clonefile (macOS) หรือ hardlink (Linux) เพื่อคัดลอกไฟล์โดยไม่ต้องอ่านและเขียนใหม่

นอกจากนี้ Bun ยังใช้การจัดเก็บข้อมูลแบบ Structure of Arrays แทน Object-based ซึ่งช่วยให้ CPU โหลดข้อมูลได้เร็วขึ้นจาก cache โดยไม่ต้องวิ่งไป RAM บ่อย ๆ และยังมีการจัดการ lockfile แบบ cache-friendly ที่ลดการ parsing JSON ซ้ำซ้อน

สาเหตุที่ Bun install เร็วกว่าเครื่องมืออื่น
ลดจำนวน system call ที่สิ้นเปลือง เช่น futex และ epoll
ใช้ Zig เรียก system call โดยตรง ไม่ผ่าน JavaScript runtime
ใช้ binary manifest แทน JSON เพื่อลดการ parsing
ใช้ clonefile (macOS) และ hardlink (Linux) เพื่อคัดลอกไฟล์แบบ O(1)

การจัดการข้อมูลแบบ cache-friendly
ใช้ Structure of Arrays แทน Object-based เพื่อเพิ่ม cache locality
ลด pointer chasing ที่ทำให้ CPU ต้องวิ่งไป RAM บ่อย
lockfile ของ Bun ใช้รูปแบบที่อ่านเร็วและลดการจัดสรรหน่วยความจำ
ใช้ string buffer เดียวสำหรับข้อมูลซ้ำ เช่นชื่อแพ็กเกจและเวอร์ชัน

การใช้ multi-core อย่างเต็มประสิทธิภาพ
Bun ใช้ thread pool แบบ work-stealing ที่ไม่มีการล็อก
แต่ละ thread มี memory pool ของตัวเอง ลดการรอการจัดสรร
network thread แยกจาก CPU thread ทำให้ไม่ต้องรอการดาวน์โหลด
สามารถประมวลผล package.json ได้มากกว่า 140,000 ไฟล์ต่อวินาที

ข้อมูลเสริมจากภายนอก
Bun ใช้ libdeflate แทน zlib เพื่อการ decompress ที่เร็วขึ้น
clonefile และ hardlink เป็นเทคนิค copy-on-write ที่ลดการใช้พื้นที่
Bun install แบบ cached เร็วกว่า npm install แบบ fresh ถึง 196 เท่า
Bun สามารถใช้ในโปรเจกต์ Node.js ได้โดยไม่ต้องเปลี่ยน runtime

https://bun.com/blog/behind-the-scenes-of-bun-install
⚙️ “เบื้องหลังความเร็วของ Bun Install — เมื่อการติดตั้งแพ็กเกจกลายเป็นงานระบบ ไม่ใช่แค่เรื่อง JavaScript” ในโลกของนักพัฒนา JavaScript ที่เคยชินกับการรอ npm install จนกาแฟเย็น Bun ได้เข้ามาเปลี่ยนเกมด้วยความเร็วที่เหนือชั้น โดยเฉลี่ยเร็วกว่า npm ถึง 7 เท่า, pnpm 4 เท่า และ yarn 17 เท่า แต่เบื้องหลังความเร็วนี้ไม่ใช่แค่การเขียนโค้ดให้ดีขึ้น — มันคือการออกแบบใหม่ทั้งหมดในระดับระบบปฏิบัติการ Bun มองการติดตั้งแพ็กเกจเป็น “ปัญหาด้านระบบ” มากกว่าปัญหา JavaScript โดยลดการใช้ system call ที่สิ้นเปลือง, ใช้การจัดเก็บข้อมูลแบบ binary, และใช้การคัดลอกไฟล์แบบ native ที่เร็วกว่าเดิมหลายเท่า นอกจากนี้ยังใช้ multi-threading เต็มรูปแบบเพื่อให้ทุก core ของ CPU ทำงานพร้อมกัน ต่างจาก npm ที่ใช้แค่ thread เดียว Bun เขียนด้วยภาษา Zig ซึ่งสามารถเรียก system call ได้โดยตรง โดยไม่ต้องผ่าน libuv หรือ event loop แบบ Node.js ทำให้การอ่านไฟล์หรือจัดการเครือข่ายเร็วขึ้นอย่างเห็นได้ชัด และยังใช้เทคนิคเช่น clonefile (macOS) หรือ hardlink (Linux) เพื่อคัดลอกไฟล์โดยไม่ต้องอ่านและเขียนใหม่ นอกจากนี้ Bun ยังใช้การจัดเก็บข้อมูลแบบ Structure of Arrays แทน Object-based ซึ่งช่วยให้ CPU โหลดข้อมูลได้เร็วขึ้นจาก cache โดยไม่ต้องวิ่งไป RAM บ่อย ๆ และยังมีการจัดการ lockfile แบบ cache-friendly ที่ลดการ parsing JSON ซ้ำซ้อน ✅ สาเหตุที่ Bun install เร็วกว่าเครื่องมืออื่น ➡️ ลดจำนวน system call ที่สิ้นเปลือง เช่น futex และ epoll ➡️ ใช้ Zig เรียก system call โดยตรง ไม่ผ่าน JavaScript runtime ➡️ ใช้ binary manifest แทน JSON เพื่อลดการ parsing ➡️ ใช้ clonefile (macOS) และ hardlink (Linux) เพื่อคัดลอกไฟล์แบบ O(1) ✅ การจัดการข้อมูลแบบ cache-friendly ➡️ ใช้ Structure of Arrays แทน Object-based เพื่อเพิ่ม cache locality ➡️ ลด pointer chasing ที่ทำให้ CPU ต้องวิ่งไป RAM บ่อย ➡️ lockfile ของ Bun ใช้รูปแบบที่อ่านเร็วและลดการจัดสรรหน่วยความจำ ➡️ ใช้ string buffer เดียวสำหรับข้อมูลซ้ำ เช่นชื่อแพ็กเกจและเวอร์ชัน ✅ การใช้ multi-core อย่างเต็มประสิทธิภาพ ➡️ Bun ใช้ thread pool แบบ work-stealing ที่ไม่มีการล็อก ➡️ แต่ละ thread มี memory pool ของตัวเอง ลดการรอการจัดสรร ➡️ network thread แยกจาก CPU thread ทำให้ไม่ต้องรอการดาวน์โหลด ➡️ สามารถประมวลผล package.json ได้มากกว่า 140,000 ไฟล์ต่อวินาที ✅ ข้อมูลเสริมจากภายนอก ➡️ Bun ใช้ libdeflate แทน zlib เพื่อการ decompress ที่เร็วขึ้น ➡️ clonefile และ hardlink เป็นเทคนิค copy-on-write ที่ลดการใช้พื้นที่ ➡️ Bun install แบบ cached เร็วกว่า npm install แบบ fresh ถึง 196 เท่า ➡️ Bun สามารถใช้ในโปรเจกต์ Node.js ได้โดยไม่ต้องเปลี่ยน runtime https://bun.com/blog/behind-the-scenes-of-bun-install
BUN.COM
Behind The Scenes of Bun Install
Learn how Bun is able to cut install times by up to 25×. Bun skips Node.js's overhead with direct system calls, cache-friendly data layouts, OS-level copy-on-write, and full-core parallelism.
0 Comments 0 Shares 40 Views 0 Reviews