The Wire · Showcase
STREAMS SHED ALLOCATIONS, HTTP/2 WINDOWS QUADRUPLE
By RepoJournal · Filed · About Node.js
Node.js core cut per-chunk memory overhead in pipeTo by eliminating redundant promise allocations, while HTTP/2 default window sizes jumped 64x to unlock full bandwidth on high-latency connections.
The streams team shipped a major optimization [1] that eliminates the write request records and microtask closures Node.js was creating for every single chunk flowing through pipeTo. The improvement directly unlocks throughput on high-latency networks. Separately, HTTP/2 stream windows jumped from 64KB to 4MB and connection windows to 32MB [2], which the maintainers calculated will deliver 16MB/s (128Mbps) on the stream window instead of 256KB/s on a 250ms RTT connection. The FFI subsystem gained a significant speedup [3] by reusing libffi 3.7's precomputed call plans for fixed-signature functions on x86-64, falling back gracefully on older versions. Test infrastructure got leaner [4] by switching SQLite tests to in-memory databases where filesystem persistence wasn't needed. On the documentation front, doc-kit underwent a major modularization [5] [6] [7], splitting the core engine (now @nodejs/doc-kit at 1.0.0) from Node-specific and legacy generators into separate npm packages with optional peer dependencies.
One email a day. Unsubscribe in one click.
Keep up with Node.js in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Upgrade to latest Node.js for streams and HTTP/2 improvements if you run high-latency production clusters nodejs/node [plan]
- → Update doc-kit references if you maintain custom documentation generators nodejs/doc-kit [plan]
- → Monitor reliability reports for any emerging patterns post-release nodejs/reliability [monitor]
References
- [1] stream: cut per-chunk allocations in pipeTo ↗ nodejs/node
- [2] http2: increase default window sizes ↗ nodejs/node
- [3] ffi: reuse libffi call plans ↗ nodejs/node
- [4] test: prefer in-memory databases in sqlite tests nodejs/node
- [5] refactor(node): extract @node-core/doc-kit package, move core to @nodejs/doc-kit ↗ nodejs/doc-kit
- [6] refactor(legacy): extract @nodejs/doc-kit-generator-legacy package ↗ nodejs/doc-kit
- [7] refactor(react): extract @nodejs/doc-kit-generator-react package ↗ nodejs/doc-kit