跪拜 Guibai
← All articles
Frontend · Backend · Programmer

Node.js's 2026 first-half perf haul: SIMD text encoding, faster require(), and a leaner event loop

By 前端之虎陈随易 ·
Read original on juejin.cn ↗ Google Translate ↗ Alt translation

The performance work is invisible but pays off in lower startup times, faster buffer-heavy code, and reduced per-operation overhead across every Node process. Teams on 24.x or 26.x can upgrade to pick up these gains without touching their code.

Summary

Across the first half of 2026, Node.js core absorbed a steady cadence of performance work. Text encoding moved to the SIMD library simdutf, speeding up TextEncoder.encode() and buf.write() - a 2048-character write is now 577% faster. The CommonJS parser was swapped for merve, cutting cold require() times by about 25%, which is especially visible in CLI tools and test runners. ESM startup got a 6.06% boost by baking the loader into a snapshot.

Buffer operations saw large gains: copyBytesFrom() with offsets is 210% faster, and small Buffer hex strings are 41.64% faster. EC public key import from JWK more than doubled, from about 76k to 169k per second, which matters for JWT-heavy services. URLSearchParams delete() removed repeated full-table scans, and node:sqlite text reads sped up by almost 30%. The event loop now skips internal checks when nothing is queued, improving every process.

The changes are grouped by release: 24.15.0/26 in March, 26.1.0/24.16.0 in April, 26.3.0/24.19.0 in May, and 26.5.0 in June. Upgrading to a current 24.x or 26.x minor brings all the gains without code changes; check the changelog for 'perf' to see exactly what landed.

Takeaways
— January: TextEncoder.encode() switched to simdutf; CJS parser now uses merve, making cold require() about 25% faster.
— February: ESM loader is baked into a startup snapshot, cutting ESM startup time by 6.06%.
— February: buf.write() on a 2048-character string is 577% faster after switching to simdutf.
— March: Buffer.copyBytesFrom() with an offset is 210% faster; EC public key import from JWK goes from 76,259 to 168,920 per second.
— March: EventEmitter no longer clones its listener array on emit, and Web Streams pipeTo() became lighter.
— April: URLSearchParams.delete() with duplicate keys is up to 1,852% faster in extreme cases, with full-table scans removed.
— April: Buffer.toString('hex') on 64-byte buffers is 41.64% faster; node:sqlite text column reads are 29.51% faster.
— April: process.nextTick() skips rejection checks when no promise is pending, jumping from 6.92M to 9.04M ops/sec.
— May: util.styleText() with hex colors is 1,135% faster by caching formatters; crypto.subtle algorithm selection is 164.69% faster.
— May: QUIC packet-processing changes raise requests per second by about 10%.
— June: TextEncoder.encode() skips a copy, speeding up 8KB strings by 43.9%; buf.copy() is 22.33% faster; event loop skips callback checks, improving from 77,957 to 81,438 per second.
Conclusions

Most of these patches are invisible micro-optimizations, yet they all land in minor releases without API changes, so the upgrade friction is near zero and the win is widespread.

The repeated use of simdutf for TextEncoder, buf.write, and Buffer operations suggests string-to-bytes conversion was a major hotspot worth attacking with SIMD.

March's JWK public key import improvement (76k to 169k per second) translates into a real throughput gain for services doing frequent JWT verification.

Concepts & terms
simdutf
A library that uses SIMD (Single Instruction, Multiple Data) instructions to process UTF-8 text in bulk, converting strings to bytes much faster than character-by-character loops.
JWK
JSON Web Key, a JSON representation of a cryptographic public key, commonly used to pass keys to JWT verification routines.
QUIC
A transport protocol designed for HTTP/3, providing lower-latency connections with features like multiplexing and connection migration. Node's support is experimental.
Startup snapshot
A serialized copy of the V8 state and built-in modules that Node loads at boot instead of rebuilding the ESM loader from scratch, cutting startup time.
From the discussion
Featured comments
卷不动了噻

Fewer people use Node now, right?

前端之虎陈随易

Plenty.

See top comments, translated →
Source: juejin.cn ↗ Google Translate ↗ Backup ↗