Reference environment
- System
- Windows x64
- CPU
- 12 logical processors
- RAM
- 32 GiB
- Chromium
- 151.0.7922.34
- Viewport
- 1440x900
( First-party data )
How long the workflow took on one reference machine, using the same image and three repetitions per batch. These numbers document a test; they are not a speed guarantee.
Measured on . Each main value is the median of three runs.
| Images | Total megapixels | Upload | Automatic adjustment | PNG export |
|---|---|---|---|---|
| 1 | 1.0 MP | 836 ms | 137 ms | 393 ms |
| 10 | 9.6 MP | 824 ms | 864 ms | 1.46 s |
| 25 | 24.0 MP | 836 ms | 10.55 s | 2.51 s |
Upload timing ends when every thumbnail and the central preview are visible. Adjustment timing ends when the batch summary appears. Export timing ends when the download page publishes its completed/failed summary.
Each sample opens an isolated context, loads copies of the project-owned 1200×800 px fixture (0.96 MP), selects the batch, runs Automatic Adjustment, and exports PNG.
npm run dev -- --port 3218
npm run benchmark:batchWhen editing photos in batch locally inside the browser, the primary constraint is not network bandwidth or storage speed, but uncompressed bitmap memory in RAM. When a compressed JPEG or PNG file of 500 KB is opened, the browser decodes it into raw 32-bit RGBA pixel arrays (ImageData). Each pixel consumes exactly 4 bytes (Red, Green, Blue, Alpha). A single 1200×800 image requires approximately 3.84 MB of uncompressed memory, meaning a batch of 25 photos holds nearly 96 MB of raw image buffers in the browser tab simultaneously.
During automatic adjustment, processing runs through an isolated background Web Worker. This worker computes tonal statistics, luminance histograms, and color balance without freezing the browser user interface. Notice how adjustment time scales sub-linearly between 10 and 25 images: modern JavaScript JIT engines (such as V8 in Chromium) optimize loops and hot code paths after initial warmup, allowing consecutive images to be adjusted efficiently.
PNG export is consistently the most demanding phase because encoding uncompressed RGBA pixel buffers into filtered, deflate-compressed PNG chunks requires intensive CPU cycles and checksum calculations. When multiple files finish exporting, JSZip bundles the output files into a single archive in memory before triggering the browser's native file download prompt.