Skip to content

perf: use native WebStream API instead of Readable.fromWeb wrapper#6444

Merged
mcollina merged 2 commits intomainfrom
optimize-webstream-performance
Jan 15, 2026
Merged

perf: use native WebStream API instead of Readable.fromWeb wrapper#6444
mcollina merged 2 commits intomainfrom
optimize-webstream-performance

Conversation

@mcollina
Copy link
Member

Summary

  • Remove Node.js stream wrapping overhead by using the WebStream reader API directly
  • Provides ~20% throughput improvement when returning Response objects or ReadableStream from route handlers
  • Add benchmark for WebStream performance testing
  • Add tests for WebStream error handling paths

Benchmark Results

Metric Before After Improvement
Req/sec 26,931 32,335 +20%
Latency (avg) 36.6 ms 30.4 ms -17%

Changes

  • lib/reply.js: Rewrote sendWebStream() to use reader.getReader() and reader.read() directly instead of Readable.fromWeb()
  • examples/benchmark/webstream.js: New benchmark file for WebStream performance testing
  • test/web-api.test.js: Added tests for error handling paths (stream errors before/after headers sent, headers already sent warning)

Test plan

  • All existing tests pass
  • New error handling tests added
  • 100% code coverage for reply.js
  • Benchmark verified ~20% improvement

Remove the Node.js stream wrapping overhead by using the WebStream
reader API directly. This provides ~21% throughput improvement when
returning Response objects or ReadableStreams from route handlers.

Changes:
- Use reader.getReader() and reader.read() directly
- Remove unused Readable import
- Add benchmark for WebStream performance testing
- Add tests for WebStream error handling paths
@mcollina mcollina force-pushed the optimize-webstream-performance branch from 4d73ed1 to 450df80 Compare January 14, 2026 13:47
@mcollina mcollina requested a review from jsumners January 14, 2026 15:06
Copy link
Member

@jean-michelet jean-michelet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd prefer someone with more experience with streams to decide whether to accept, but LGTM.

@mcollina mcollina merged commit c89945d into main Jan 15, 2026
33 checks passed
@mcollina mcollina deleted the optimize-webstream-performance branch January 15, 2026 11:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants