SUZUKI Sosuke
f01467d3dc
perf(buffer): optimize Buffer.from(array) by using setFromArrayLike directly (#26135)
## Summary
Optimizes `Buffer.from(array)` by bypassing `JSC::construct()` overhead
(~30ns) and leveraging JSC's internal array optimizations.
## Changes
- For JSArray inputs, directly use `setFromArrayLike()` which internally
detects array indexing types (Int32Shape/DoubleShape) and uses bulk copy
operations (`copyFromInt32ShapeArray`/`copyFromDoubleShapeArray`)
- Array-like objects and iterables continue to use the existing slow
path
- Added mitata benchmark for measuring performance
## Benchmark Results
| Test | Before | After | Improvement |
|------|--------|-------|-------------|
| Buffer.from(int32[8]) | ~85ns | ~43ns | ~50% faster |
| Buffer.from(int32[64]) | ~207ns | ~120ns | ~42% faster |
| Buffer.from(int32[1024]) | ~1.85μs | ~1.32μs | ~29% faster |
| Buffer.from(double[8]) | ~86ns | ~50ns | ~42% faster |
| Buffer.from(double[64]) | ~212ns | ~151ns | ~29% faster |
Bun is now faster than Node.js for these operations.
## Test
All 449 buffer tests pass.
2026-01-15 12:10:47 -08:00
..
2025-12-19 23:18:21 -08:00
2025-12-11 17:44:14 -08:00
2026-01-08 11:32:08 -08:00
2025-12-15 12:51:13 -08:00
2026-01-07 23:23:27 -08:00
2026-01-15 12:10:47 -08:00
2026-01-14 17:41:21 -08:00
2026-01-14 16:08:49 -08:00
2026-01-15 10:26:43 -08:00
2026-01-06 23:05:01 +00:00
2025-11-10 14:38:26 -08:00
2026-01-14 13:34:31 -08:00
2026-01-02 04:52:47 -08:00
2025-11-10 14:38:26 -08:00
2025-11-23 01:41:17 -08:00
2026-01-10 18:03:24 -08:00
2025-12-05 18:32:51 -08:00
2026-01-14 18:22:32 -08:00
2025-12-16 14:29:39 -08:00
2026-01-14 18:37:54 -08:00
2026-01-14 18:37:54 -08:00
2026-01-09 16:56:31 -08:00
2025-10-03 17:10:28 -07:00
2025-12-15 19:50:11 -08:00
2025-11-24 20:16:03 -08:00
2025-11-10 14:38:26 -08:00
2025-11-10 14:38:26 -08:00
2025-12-25 23:49:23 -08:00
2026-01-08 19:46:06 -08:00
2025-11-10 14:38:26 -08:00
2025-11-20 20:56:02 -08:00
2026-01-14 18:37:54 -08:00
2025-11-10 14:38:26 -08:00
2026-01-14 12:53:04 -08:00
2025-12-10 16:17:57 -08:00
2026-01-09 00:33:35 -08:00
2025-11-10 14:38:26 -08:00
2025-12-22 12:07:24 -08:00
2025-12-01 21:59:11 -08:00
2025-12-25 14:00:58 -08:00
2026-01-14 16:46:20 -08:00
2025-11-10 14:38:26 -08:00
2025-10-04 02:17:55 -07:00
2025-10-31 19:50:55 -07:00
2025-11-26 00:02:43 -08:00
2025-11-05 15:28:28 -08:00
2025-11-10 14:38:26 -08:00
2025-10-23 23:08:08 -07:00
2026-01-05 10:21:49 -08:00
2025-11-10 14:38:26 -08:00
2025-11-10 14:38:26 -08:00
2026-01-14 16:08:49 -08:00
2025-12-11 17:44:14 -08:00
2025-11-25 11:06:24 -08:00
2025-11-10 14:38:26 -08:00
2025-11-10 19:58:02 -08:00
2026-01-07 12:33:21 -08:00
2026-01-14 13:10:53 -08:00
2025-09-26 15:19:45 -07:00
2025-11-18 10:49:21 -08:00
2025-10-29 19:29:04 -07:00
2025-11-03 22:20:07 -08:00
2025-11-10 14:38:26 -08:00
2025-11-20 20:56:02 -08:00
2025-11-20 20:56:02 -08:00
2025-09-26 22:21:00 -07:00
2025-11-10 14:38:26 -08:00
2025-11-10 14:38:26 -08:00
2025-11-10 14:38:26 -08:00
2025-12-19 23:17:29 -08:00
2026-01-07 16:09:49 -08:00
2025-11-20 23:37:31 -08:00
2025-11-10 14:38:26 -08:00
2025-11-18 10:49:21 -08:00
2025-10-23 23:08:08 -07:00
2025-11-10 14:38:26 -08:00
2026-01-07 16:09:49 -08:00
2025-08-23 06:55:30 -07:00
2025-10-04 00:31:47 -07:00
2025-11-10 14:38:26 -08:00
2025-10-02 14:11:29 -07:00
2025-11-10 14:38:26 -08:00
2025-11-10 14:38:26 -08:00
2025-09-09 20:41:10 -07:00
2026-01-08 16:21:34 -08:00
2026-01-07 22:46:51 -08:00
2025-12-17 19:56:25 -08:00
2025-08-23 06:55:30 -07:00
2025-11-10 14:38:26 -08:00
2025-11-10 14:38:26 -08:00
2025-12-21 17:12:42 -08:00
2025-11-10 14:38:26 -08:00
2025-12-21 17:12:42 -08:00
2025-10-23 23:08:08 -07:00
2025-12-21 17:12:42 -08:00
2026-01-09 16:21:40 -08:00
2025-11-10 14:38:26 -08:00
2025-11-10 14:38:26 -08:00
2025-11-10 14:38:26 -08:00
2025-10-18 18:14:01 -07:00
2025-11-10 14:38:26 -08:00
2025-09-14 04:14:48 -07:00
2026-01-07 22:46:51 -08:00
2025-11-30 23:11:33 -08:00
2026-01-07 16:09:49 -08:00
2025-11-10 14:38:26 -08:00
2025-09-30 00:10:15 -07:00
2025-12-06 16:37:09 -08:00
2025-12-01 21:59:11 -08:00
2025-11-10 14:38:26 -08:00
2025-11-13 19:29:16 -08:00
2025-09-26 15:15:58 -07:00
2026-01-14 12:52:41 -08:00
2025-11-15 16:36:15 -08:00
2025-09-26 22:21:00 -07:00
2025-12-11 17:44:14 -08:00
2025-09-03 15:40:44 -07:00
2025-09-22 19:28:26 -07:00
2025-11-10 14:38:26 -08:00
2026-01-14 16:08:49 -08:00
2025-11-10 14:38:26 -08:00
2025-11-28 22:56:28 -08:00
2025-12-15 19:50:11 -08:00
2025-12-15 19:50:11 -08:00
2025-11-10 14:38:26 -08:00
2026-01-14 13:31:06 -08:00
2025-09-03 15:40:44 -07:00
2025-11-10 14:38:26 -08:00
2025-12-21 17:12:42 -08:00
2025-10-03 17:10:28 -07:00
2025-12-15 13:21:41 -08:00
2025-11-10 14:38:26 -08:00
2026-01-14 16:46:20 -08:00
2025-11-30 23:11:33 -08:00
2025-11-10 14:38:26 -08:00
2025-12-18 21:42:14 -08:00