- เครื่องมือเบนช์มาร์กที่มีขนาดเล็กมาก ไม่เกิน 10KB พัฒนาขึ้นเพื่อวัดประสิทธิภาพของโค้ดได้อย่างแม่นยำ
- ทำงานบนพื้นฐานของ Web API และรองรับ การวัดเวลาอย่างแม่นยำ ด้วย
process.hrtime หรือ performance.now
- สามารถรันได้ในสภาพแวดล้อมรันไทม์ JavaScript ที่หลากหลาย เช่น Node.js, Deno, Bun
- มี ฟีเจอร์วิเคราะห์เชิงสถิติ : รองรับการคำนวณ latency และ throughput เช่น ค่าเฉลี่ย, ส่วนเบี่ยงเบนมาตรฐาน, ค่าความคลาดเคลื่อน, ความแปรปรวน, เปอร์เซ็นไทล์ เป็นต้น
- โหมดรันแบบ concurrency : สามารถรันแบบขนานในระดับ
task หรือ bench ได้ และควบคุมจำนวนการรันพร้อมกันสูงสุดด้วยตัวเลือก threshold
- โครงสร้างแบบ event-driven ที่ขยายต่อได้ : คลาส
Bench และ Task สืบทอดจาก EventTarget และสามารถลงทะเบียน event listener เช่น cycle, abort ได้
- ตรวจจับฟังก์ชัน asynchronous อัตโนมัติ : ตรวจสอบ
AsyncFunction หรือการคืนค่า Promise เพื่อเปิดโหมด async โดยอัตโนมัติ
- การแสดงผลและแปลงผลลัพธ์ : เมธอด
bench.table() จะแปลงผลลัพธ์ให้อยู่ในรูปแบบเอาต์พุต console.table() และสามารถปรับแต่งรูปแบบเอาต์พุตได้ด้วยฟังก์ชัน Converter แบบกำหนดเอง
- เมื่อตั้งค่า
retainSamples จะเก็บข้อมูลตัวอย่างดิบไว้ตามเดิม เพื่อนำไปใช้กับการวิเคราะห์แบบกำหนดเอง การสร้างกราฟแสดงผล หรือการส่งออกผลลัพธ์
- เลือกใช้ timestamp provider ที่ให้ความละเอียดสูงได้
- ค่าเริ่มต้นคือ
performance.now()
- รองรับตัวเลือกที่ปรับให้เหมาะกับแต่ละรันไทม์ เช่น
hrtimeNow, bunNanoseconds, auto
- สามารถสร้างอิมพลีเมนต์ TimestampProvider interface แบบกำหนดเองได้
- รองรับ การควบคุมการยกเลิกด้วย AbortSignal
- สามารถ ยกเลิกการรัน (abort) ได้ทั้งระดับเบนช์ทั้งหมดหรือระดับแทสก์เดี่ยว
- เมื่อยกเลิกจะเกิดอีเวนต์
abort และตั้งค่าสถานะ (task.result.aborted)
- โครงสร้างแบบแพ็กเกจเดียวโดยไม่พึ่งพาไลบรารีภายนอก ช่วยให้เริ่มต้นและรันได้รวดเร็ว
- เมื่อเทียบกับ Benchmark.js, mitata, tatami-ng, Bema จุดเด่นคือ เล็กกว่า เรียบง่ายกว่า และเป็นมิตรกับ Web API มากกว่า
1 ความคิดเห็น
ตอนนี้ก็แอบสงสัยเหมือนกันว่าของแบบนี้ยังจำเป็นอยู่ไหม เพราะ AI เขียนสคริปต์สำหรับวัด performance ให้เหมาะกับช่วงเวลานั้น ๆ ได้ดีมากอยู่แล้ว..