Skip to content

Commit 0093acf

Browse files
benchmark ImageScript 3.20.0
1 parent 6d43235 commit 0093acf

7 files changed

Lines changed: 331 additions & 331 deletions

File tree

‎bench/README.md‎

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,41 +17,41 @@ Photon is WebAssembly, and so is jsquash (Squoosh's libavif and libjxl, for AVIF
1717

1818
## Numbers
1919

20-
Time per operation (less is faster), measured 2026-11-08 with Node.js v24.22.2 on AMD EPYC 7763 64-Core Processor, ImageScript 3.19.0.
20+
Time per operation (less is faster), measured 2026-11-08 with Node.js v24.22.2 on AMD EPYC 7763 64-Core Processor, ImageScript 3.20.0.
2121

2222
| | **ImageScript** | **Jimp** | **image-js** | **PureJsImage** | **Photon** | **sharp** | **jsquash** | **@napi-rs/canvas** |
2323
|---|--:|--:|--:|--:|--:|--:|--:|--:|
24-
| decode JPEG | **72 ms** | 162 ms | 189 ms | 133 ms | 47 ms | 14 ms | – | 21 ms |
25-
| decode PNG | **29 ms** | 63 ms | 116 ms | 80 ms | 25 ms | 19 ms | – | 19 ms |
26-
| decode WebP (lossy) | **92 ms** | – | – | 104 ms | 90 ms | 28 ms | – | 17 ms |
27-
| decode AVIF | **242 ms** | – | – | 1.9 s | – | 80 ms | 224 ms | 64 ms |
28-
| decode JPEG XL | **400 ms** | – | – | fails | – | – | 462 ms | 73 ms |
29-
| decode animated GIF | **64 ms** | – | – | – | – | 70 ms | – | – |
30-
| decode animated WebP | **289 ms** | – | – | – | – | 291 ms | – | – |
31-
| encode JPEG (quality 80) | **64 ms** | 409 ms | 107 ms | 143 ms | 113 ms | 18 ms | – | 29 ms |
32-
| encode PNG | **178 ms** | 244 ms | 340 ms | 548 ms | 102 ms | 136 ms | – | 469 ms |
33-
| encode WebP (quality 80) | **211 ms** | – | – | 134 ms | – | 187 ms | – | 159 ms |
34-
| encode WebP (lossless) | **1.3 s** | – | – | 2.8 s | 43 ms | 1.6 s | – | 498 ms |
24+
| decode JPEG | **79 ms** | 151 ms | 203 ms | 132 ms | 47 ms | 15 ms | – | 21 ms |
25+
| decode PNG | **31 ms** | 64 ms | 117 ms | 84 ms | 25 ms | 19 ms | – | 19 ms |
26+
| decode WebP (lossy) | **90 ms** | – | – | 104 ms | 89 ms | 28 ms | – | 17 ms |
27+
| decode AVIF | **252 ms** | – | – | 1.9 s | – | 81 ms | 222 ms | 61 ms |
28+
| decode JPEG XL | **400 ms** | – | – | fails | – | – | 463 ms | 67 ms |
29+
| decode animated GIF | **63 ms** | – | – | – | – | 70 ms | – | – |
30+
| decode animated WebP | **291 ms** | – | – | – | – | 291 ms | – | – |
31+
| encode JPEG (quality 80) | **62 ms** | 410 ms | 109 ms | 144 ms | 114 ms | 18 ms | – | 29 ms |
32+
| encode PNG | **177 ms** | 239 ms | 371 ms | 545 ms | 102 ms | 140 ms | – | 467 ms |
33+
| encode WebP (quality 80) | **207 ms** | – | – | 136 ms | – | 189 ms | – | 159 ms |
34+
| encode WebP (lossless) | **1.2 s** | – | – | 2.8 s | 44 ms | 1.5 s | – | 488 ms |
3535
| encode AVIF (quality 60) | **5.2 s** | – | – | 1.4 s | – | 2.6 s | 2.4 s | – |
3636
| encode JPEG XL (quality 90) | **2.2 s** | – | – | – | – | – | 2.5 s | – |
37-
| encode JPEG XL (lossless) | **766 ms** | – | – | – | – | – | 450 ms | – |
38-
| encode animated GIF | **228 ms** | – | – | – | – | 1.2 s | – | – |
39-
| encode animated WebP (q 80) | **1.0 s** | – | – | – | – | 780 ms | – | – |
40-
| resize to half | **13 ms** | 17 ms | 93 ms | 64 ms | 66 ms | 9.5 ms | – | 3.0 ms |
41-
| resize to half, bicubic | **72 ms** | 203 ms | 389 ms | – | 104 ms | 11 ms | – | – |
42-
| thumbnail (cover 400×400) | **15 ms** | 51 ms | – | 41 ms | – | 5.7 ms | – | 1.4 ms |
43-
| crop | **1.2 ms** | 19 ms | 15 ms | 10 ms | 5.2 ms | 0.99 ms | – | 0.91 ms |
44-
| rotate by 30° | **41 ms** | 600 ms | 741 ms | 512 ms | 214 ms | 41 ms | – | 28 ms |
37+
| encode JPEG XL (lossless) | **813 ms** | – | – | – | – | – | 447 ms | – |
38+
| encode animated GIF | **230 ms** | – | – | – | – | 1.2 s | – | – |
39+
| encode animated WebP (q 80) | **998 ms** | – | – | – | – | 779 ms | – | – |
40+
| resize to half | **13 ms** | 17 ms | 93 ms | 65 ms | 67 ms | 9.5 ms | – | 3.1 ms |
41+
| resize to half, bicubic | **72 ms** | 201 ms | 389 ms | – | 106 ms | 11 ms | – | – |
42+
| thumbnail (cover 400×400) | **20 ms** | 51 ms | – | 41 ms | – | 5.7 ms | – | 1.3 ms |
43+
| crop | **1.4 ms** | 18 ms | 15 ms | 10 ms | 5.4 ms | 0.97 ms | – | 0.81 ms |
44+
| rotate by 30° | **40 ms** | 597 ms | 743 ms | 508 ms | 214 ms | 40 ms | – | 27 ms |
4545
| rotate by 90° | **12 ms** | 49 ms | 23 ms | 128 ms | 147 ms | 4.8 ms | – | 13 ms |
46-
| flip | **2.0 ms** | 100 ms | 13 ms | 60 ms | 20 ms | 4.3 ms | – | 9.9 ms |
47-
| blur (radius 5) | **77 ms** | 91 s | 861 ms | – | 154 ms | 19 ms | – | 17 ms |
48-
| sharpen | **205 ms** | – | – | – | 105 ms | 213 ms | – | – |
49-
| composite an overlay | **2.3 ms** | 34 ms | 8.4 ms | – | 6.2 ms | 5.6 ms | – | 2.6 ms |
50-
| greyscale | **6.9 ms** | 118 ms | 20 ms | – | 6.7 ms | 26 ms | – | 7.4 ms |
51-
| brightness and contrast | **11 ms** | 274 ms | – | – | 28 ms | 15 ms | – | 14 ms |
52-
| render text | **0.55 ms** | – | – | – | – | 0.59 ms | – | 0.48 ms |
53-
| render SVG | **158 ms** | – | – | – | – | 39 ms | – | 12 ms |
54-
| thumbnail, keeping HDR | **186 ms** | – | – | – | – | 160 ms | – | – |
46+
| flip | **2.3 ms** | 100 ms | 13 ms | 59 ms | 20 ms | 4.3 ms | – | 10 ms |
47+
| blur (radius 5) | **77 ms** | 80 s | 857 ms | – | 153 ms | 18 ms | – | 16 ms |
48+
| sharpen | **217 ms** | – | – | – | 105 ms | 211 ms | – | – |
49+
| composite an overlay | **2.6 ms** | 41 ms | 8.8 ms | – | 6.1 ms | 5.4 ms | – | 2.4 ms |
50+
| greyscale | **6.7 ms** | 123 ms | 20 ms | – | 6.7 ms | 26 ms | – | 7.2 ms |
51+
| brightness and contrast | **11 ms** | 273 ms | – | – | 28 ms | 14 ms | – | 13 ms |
52+
| render text | **0.54 ms** | – | – | – | – | 0.63 ms | – | 0.33 ms |
53+
| render SVG | **152 ms** | – | – | – | – | 38 ms | – | 11 ms |
54+
| thumbnail, keeping HDR | **191 ms** | – | – | – | – | 161 ms | – | – |
5555

5656
Encoded sizes:
5757

@@ -77,7 +77,7 @@ Encoded sizes:
7777
| | **ImageScript** | **Jimp** | **image-js** | **PureJsImage** | **Photon** | **sharp** | **jsquash** | **@napi-rs/canvas** |
7878
|---|---|---|---|---|---|---|---|---|
7979
| kind | JavaScript | JavaScript | JavaScript | JavaScript | WebAssembly | native (libvips) | WebAssembly | native (Skia) |
80-
| package | `imagescript@3.19.0` | `jimp@1.6.1` | `image-js@1.7.1` | `purejsimage@0.17.0` | `@silvia-odwyer/photon-node@0.3.4` | `sharp@0.35.5` | `@jsquash/avif@2.1.1 @jsquash/jxl@1.3.0` | `@napi-rs/canvas@1.0.11` |
80+
| package | `imagescript@3.20.0` | `jimp@1.6.1` | `image-js@1.7.1` | `purejsimage@0.17.0` | `@silvia-odwyer/photon-node@0.3.4` | `sharp@0.35.5` | `@jsquash/avif@2.1.1 @jsquash/jxl@1.3.0` | `@napi-rs/canvas@1.0.11` |
8181
| install size | 2.5 MB | 26.8 MB | 47.8 MB | 6.7 MB | 2.3 MB | 20.3 MB | 14.2 MB | 35.0 MB |
8282
| packages | 1 | 64 | 55 | 1 | 1 | 6 | 3 | 2 |
8383

0 commit comments

Comments
 (0)