Tinybench - ไลบรารีเบนช์มาร์ก JavaScript แบบน้ำหนักเบา
(github.com/tinylibs)- เครื่องมือเบนช์มาร์กที่มีขนาดเล็กมาก ไม่เกิน 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 ให้เหมาะกับช่วงเวลานั้น ๆ ได้ดีมากอยู่แล้ว..