Generated performance evidence
Web codec and scientific reader benchmarks.
Results stay separated by workload class. A timing is admitted only after dimensions, selection, sample or pixel hashes, output validation, and any required quality oracle pass. Unsupported and invalid rows never count as fast.
Web codec benchmarks
Speed, quality, and peak memory.
The 2026-08-24 profile recorded 122 validated passes and 25 explicit unsupported rows across TypeScript, explicitly registered PureJsImage WASM, other pure JavaScript libraries, jSquash WebAssembly, and Sharp/libvips.
The memory headline is the same 24-megapixel northstar photo workflow within one result and one environment fingerprint: 181.8 MiBfor the TypeScript path versus 1189.1 MiB for Jimp. It is not a cross-date comparison.
JPEGPNGWebPTIFFAVIF
This suite measures JPEG, PNG, WebP, TIFF, and AVIF. It does not represent every stable PureJsImage codec.
Choose a web codec benchmark chart
Web codec speed
Median wall time · logarithmic scale · lower is better
Scroll chart horizontally
Web codec quality
Premultiplied-RGBA PSNR · higher is better
Scroll chart horizontally
Web codec peak memory
Absolute process peak RSS · lower is better
Scroll chart horizontally
Recorded web codec engines
Scroll table horizontally
| Engine | Version | Class |
|---|---|---|
| purejsimage | 0.16.0 (workspace) | pure-javascript |
| purejsimage-wasm | 0.16.0 (workspace WASM) | webassembly |
| jimp | 1.6.0 | pure-javascript |
| sharp | 0.35.3 | native |
| sharp-single-thread | 0.35.3 | native-single-thread |
| image-js | 1.7.0 | pure-javascript |
| jsquash | avif 2.1.1; jpeg 1.6.0; png 3.1.1; webp 1.5.0; resize 2.1.1 | webassembly |
Scientific readers
First usable data, selected operations, source I/O, and footprint.
The 2026-08-16 PureJsImage baseline validated 43/43 workloads across 33 explicit readers. The competitor charts use only shared workloads with validated output; every published workload includes a PureJsImage row plus at least one external engine. The 2026-08-17 scaling profile admitted 6/13 PureJsImage medium/large rows under the 10% CV threshold. Unsupported semantics remain visible in chart notes and report status counts.
Choose a scientific reader benchmark chart
First usable block
Latency until validated selected data becomes available · lower is better
Scroll chart horizontally
Selected operation
Complete public operation path for the pinned selection · lower is better
Scroll chart horizontally
Absolute peak RSS
Whole isolated process, including runtime, native allocations, and WASM memory
Scroll chart horizontally
Source I/O
Instrumented request count, returned bytes, unique bytes, and overfetch
Scroll chart horizontally
Package and WASM footprint
gzip/Brotli JavaScript, external or embedded WASM, and installed bytes
Scroll chart horizontally
Scientific metric contract
Scroll table horizontally
| Metric | Interpretation |
|---|---|
| Time to first usable block | Latency until validated selected data becomes available after open and initialization. |
| Selected-operation wall time | Complete public operation path for the pinned selection; validation remains outside timing. |
| Absolute peak RSS | Whole isolated process, including runtime, native allocations, and WASM memory. |
| Source requests and bytes | Instrumented request count, returned bytes, unique bytes, and overfetch for the selected operation. |
| Import and initialization | Module import, registry construction, and WASM initialization remain separate from steady-state work. |
| Bundle and WASM footprint | gzip/Brotli JavaScript, external or embedded WASM, installed bytes, and package count. |
| Correctness | Expected shape, native sample type, selected-sample hash, calibration assertions, and output bytes. |
Scientific JS/WASM engine versions
Scroll table horizontally
| Engine | Version | Class |
|---|---|---|
| purejsimage | 0.10.0 | pure-javascript |
| geotiff | 3.0.5 | pure-javascript |
| tiff | 7.1.3 | pure-javascript |
| utif2 | 4.1.0 | pure-javascript |
| image-js | 1.7.0 | pure-javascript |
| nifti-reader-js | 0.8.0 | pure-javascript |
| npyjs | 1.2.0 | pure-javascript |
| jsfive | 0.4.0 | pure-javascript |
| h5wasm | 0.10.3 | webassembly |
| itk-wasm-image-io | 1.6.1 | webassembly |
PureJsImage scientific baseline → · PureJsImage medium/large scaling report → · Scientific JS/WASM report → · Scientific reader tables → · Scientific format reference →
Current generated sizes
Entry points, installed packages, and WASM assets.
Minified JavaScript uses one deterministic esbuild configuration. npm package values are extracted installed bytes, not compressed tarball downloads. Native and WASM payloads are labeled separately from JavaScript wrappers.
PureJsImage major entries
Scroll table horizontally
| Entry | Import | Minified | gzip | Brotli | Installed |
|---|---|---|---|---|---|
| Core API initial chunk | purejsimage | 19.5 KiB | 6.6 KiB | 5.9 KiB | 7.9 MiB |
| Core + scientific platform | purejsimage/scientific | 197.5 KiB | 56.3 KiB | 47.4 KiB | 7.9 MiB |
| Scientific readers: all | purejsimage/scientific/readers/all | 1242.8 KiB | 359.4 KiB | 286.7 KiB | 7.9 MiB |
| Core + common web codecs | purejsimage/codecs/web | 651.5 KiB | 238.7 KiB | 198.2 KiB | 7.9 MiB |
| Core + all stable codecs | purejsimage/codecs/all | 1198.2 KiB | 414.4 KiB | 334.0 KiB | 7.9 MiB |
Package footprint context
The PureJsImage common-web entry is measured above. The competitor table preserves the historical JPEG/PNG-matched package targets so adding AVIF does not silently redefine the older footprint comparison; each common-web benchmark report records the exact installed engine package set it used.
Scroll table horizontally
| Engine import | Implementation | Minified JS | Installed | Production packages |
|---|---|---|---|---|
| PureJsImage (matched) | pure-javascript | 204.3 KiB | 7.9 MiB | 1 |
| PureJsImage (all stable codecs) | pure-javascript | 1198.2 KiB | 7.9 MiB | 1 |
| Jimp | pure-javascript | 577.4 KiB | 29.3 MiB | 70 |
| image-js | pure-javascript | 361.5 KiB | 17.0 MiB | 46 |
| jSquash | webassembly | 52.4 KiB | 1.0 MiB | 3 |
| Sharp JS wrapper | native-wrapper | 128.4 KiB | 18.9 MiB | 6 |
Optional PureJsImage WASM assets
Scroll table horizontally
| Asset | Raw | gzip | Brotli |
|---|---|---|---|
| JPEG decoder WASM | 31.0 KiB | 7.7 KiB | 6.5 KiB |
| JPEG decoder SIMD WASM | 30.8 KiB | 7.8 KiB | 6.6 KiB |
| JPEG encoder WASM | 37.1 KiB | 6.5 KiB | 5.3 KiB |
| JPEG encoder SIMD WASM | 45.2 KiB | 8.8 KiB | 7.1 KiB |
| PNG codec WASM | 3.8 KiB | 1.6 KiB | 1.4 KiB |
| PNG codec SIMD WASM | 7.1 KiB | 2.9 KiB | 2.5 KiB |
| WebP codec WASM | 9.1 KiB | 3.7 KiB | 3.2 KiB |
| WebP codec SIMD WASM | 11.6 KiB | 4.6 KiB | 3.9 KiB |
Historical deployment evidence
AWS Lambda measurements remain separately dated.
The August 9, 2026 Lambda reports remain useful for x86_64/ARM64, cold/warm, memory-tier, and explicit JPEG WASM context. They are historical deployment snapshots, not merged into the current local headline or scientific-reader charts.
Methodology
Reproduce and interpret the evidence.
- Input bytes and fixture hashes are pinned before measurement.
- Measured samples run in isolated processes after configured untimed warmups.
- Output validation and independent quality measurement remain outside timed regions.
- Web codec resize charts use engine-default kernels and are default-experience comparisons.
- Scientific charts compare only shared operations; they do not create an all-format winner score.
- Different environment fingerprints are not compared without an explicit disclaimer.
npm run fixtures:prepare
npm run fixtures:verify
npm run bench:web-codecs
npm run bench:web-codecs:charts
npm run bench:scientific:baseline
npm run bench:scientific:range
npm run bench:scientific:scaling
npm run bench:scientific:competitors:js
npm run bench:scientific:competitors:baseline
npm run bench:viewers:smoke
npm run documentation:write
npm run documentation:check