Recorded medians

Targeted work per second and retained memory.

These medians come from one recorded environment. Each row keeps its nine raw baseline and candidate samples in the linked JSON.

9Alternating samples
Node 24.18.0Runtime
Windows x64Platform
Core Ultra 9 275HXProcessor
Workload9.0.2 median9.1.0 medianResultPrimary change
1,000 repeated query values1,076 req/s7,695 req/s7.15× speedupIn-place array accumulation.
1,000-domain virtual-host miss13,926 req/s23,259 req/s1.67× speedupCompiled O(1) hostname map.
1,000-domain virtual-host hit4,173 req/s4,198 req/s1.01× speedupHostname map plus canonical-root reuse.
16-byte custom-hook range from 8 MiB790 req/s2,310 req/s2.92× speedupExact selected-byte read.
Default Brotli for 2.5 MiB structured text0.580 req/s112.267 req/s193.56× speedupValidated default quality 4; 161,802 → 270,759 compressed bytes.
100,000 cold Config constructions201,737 instances/s580,412 instances/s2.88× speedupDeferred MIME-map materialization.
10,000 cold Configs retained11,816.5 B/instance5,786.0 B/instance51.0% lowerDeferred per-instance MIME map.
Immediate deploy + close180 leaked listeners0 leaked listeners180 → 0Pending listeners close cleanly.
Ratio meaning: each displayed ratio is the magnitude of change; its speedup, slowdown, reduction, or increase label states the direction. The listener row reports the correctness count across 180 recorded cycles per source.

Compatibility and representative paths

Read the optimized paths beside their controls.

Workload9.0.2 median9.1.0 medianResultContract
Default-hook static GET4,055 req/s4,254 req/s1.05× speedupExact static response through the normal route.
Bodyless static HEAD10,981 req/s13,739 req/s1.25× speedupGET metadata with an empty wire body.
Bodyless custom request hook16,698 req/s16,507 req/s1.01× slowdownEmpty string and Buffer body contract.
Default-hook HEAD for 8 MiB5,254 req/s5,884 req/s1.12× speedupFull metadata and an empty wire body through the bodyless path.
Custom beforeServe HEAD765 req/s688 req/s1.11× slowdownThe hook receives the full 8 MiB representation; the wire body stays empty.
Brotli quality 110.584 req/s0.581 req/s1.01× slowdownserver.brotliQuality:11 preserves the high-quality option through Node's built-in node:zlib; runtime dependencies stay at zero.
Cold one-key MIME overlays retained11,818.6 B/instance5,972.4 B/instance49.5% lowerOverlays stay deferred and instance-isolated.
Materialized MIME maps retained11,816.7 B/instance12,018.8 B/instance1.7% higherReading contentType creates the ordinary isolated map.

The two 8 MiB HEAD rows quantify the full-representation compatibility cost for custom hooks. The materialized Config row quantifies the point where deferred state becomes the complete per-instance MIME map.

Workload contracts

Every timed path proves its output.

AreaStandard profileAcceptance contract
HTTP400 small requests, 40 repeated-query requests, 8 large-file requests, or 2 Brotli requests per sample; 10 clients.Status, headers, body bytes, decompressed bytes, and response counts.
Query1,000 ordered values assigned to one key.Array length, first value, and last value.
Routing1,000 mixed-case domains with an accepted Host and an unknown Host.Selected root returns exact bytes; miss returns 421.
Range hook16 bytes selected from the middle of an 8 MiB file.Hook sees 16 bytes, transforms them, preserves 206/Content-Range, and runs afterServe once.
Config100,000 constructions or 10,000 retained instances in fresh garbage-collected workers.Default checksum, key order, own MIME entries, mutation isolation, and false-to-overlay restoration.
Lifecycle20 deploy-on-port-zero plus immediate-close cycles per sample.Live listener and ready-callback counts after close.

Comparison method

Keep order, processes, and evidence explicit.

MethodImplementation
Exact baselineExports Server.js, Config.js, and MimeTypes.js from Git tag 9.0.2 into an OS temporary directory.
Alternating orderEach sample alternates baseline-first and candidate-first execution.
Process isolationHTTP variants use separate server processes. Config memory and lifecycle use fresh --expose-gc workers.
Recorded boundaryFixture creation, startup, response preflight, warmup, worker startup, and cleanup occur outside action timing.
AggregationMedian, minimum, maximum, and all nine raw samples are retained.
Source identityGit ref, commit, working-tree state, source hashes, and benchmark-harness hashes identify the complete comparison.
EnvironmentNode, V8, platform, OS release, architecture, processor, logical cores, and total memory are recorded.
Interpretation: compare ratios within the recorded workload and environment. Run the same profile on deployment-class hardware when capacity planning needs host-specific numbers.

Reproduce

Run the exact source comparison.

shell · repository checkout with tag 9.0.2
npm run benchmark:core

node --expose-gc benchmark/core.js \
    --output site/benchmarks/core-9.0.2-vs-9.1.0.json
FileRole
benchmark/core.jsExports the baseline, creates fixtures, alternates samples, validates results, and writes JSON.
benchmark/core-server.jsRuns one source variant and exposes the hook scenarios through IPC.
benchmark/core-worker.jsMeasures Config construction/memory and immediate-close correctness in fresh processes.
site/benchmarks/core-9.0.2-vs-9.1.0.jsonPublished environment, configuration, summaries, source hashes, and raw samples.