Skip to content

Commit b2e0bb8

Browse files
benchmark ImageScript 3.16.0
1 parent 29177af commit b2e0bb8

8 files changed

Lines changed: 369 additions & 358 deletions

File tree

‎bench/README.md‎

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -17,40 +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-06 with Node.js v24.22.2 on AMD EPYC 9V45 96-Core Processor, ImageScript 3.15.0.
20+
Time per operation (less is faster), measured 2026-11-06 with Node.js v24.22.2 on AMD EPYC 9V74 80-Core Processor, ImageScript 3.16.0.
2121

2222
| | **ImageScript** | **Jimp** | **image-js** | **PureJsImage** | **Photon** | **sharp** | **jsquash** | **@napi-rs/canvas** |
2323
|---|--:|--:|--:|--:|--:|--:|--:|--:|
24-
| decode JPEG | **49 ms** | 100 ms | 126 ms | 85 ms | 33 ms | 11 ms | – | 14 ms |
25-
| decode PNG | **23 ms** | 38 ms | 79 ms | 55 ms | 18 ms | 15 ms | – | 15 ms |
26-
| decode WebP (lossy) | **59 ms** | – | – | 67 ms | 66 ms | 21 ms | – | 12 ms |
27-
| decode AVIF | **163 ms** | – | – | 1.0 s | – | 66 ms | 153 ms | 43 ms |
28-
| decode JPEG XL | **262 ms** | – | – | fails | – | – | 295 ms | 50 ms |
29-
| decode animated GIF | **43 ms** | – | – | – | – | 50 ms | – | – |
30-
| decode animated WebP | **183 ms** | – | – | – | – | 203 ms | – | – |
31-
| encode JPEG (quality 80) | **41 ms** | 252 ms | 72 ms | 95 ms | 69 ms | 13 ms | – | 18 ms |
32-
| encode PNG | **126 ms** | 165 ms | 221 ms | 390 ms | 71 ms | 104 ms | – | 364 ms |
33-
| encode WebP (quality 80) | **134 ms** | – | – | 81 ms | – | 141 ms | – | 125 ms |
34-
| encode WebP (lossless) | **789 ms** | – | – | 1.8 s | 29 ms | 1.1 s | – | 353 ms |
35-
| encode AVIF (quality 60) | **3.3 s** | – | – | 873 ms | – | 1.4 s | 1.6 s | – |
36-
| encode JPEG XL (quality 90) | **1.5 s** | – | – | – | – | – | 1.7 s | – |
37-
| encode JPEG XL (lossless) | **496 ms** | – | – | – | – | – | 302 ms | – |
38-
| encode animated GIF | **152 ms** | – | – | – | – | 756 ms | – | – |
39-
| encode animated WebP (q 80) | **652 ms** | – | – | – | – | 561 ms | – | – |
40-
| resize to half | **9.0 ms** | 9.3 ms | 57 ms | 44 ms | 36 ms | 5.9 ms | – | 2.8 ms |
41-
| resize to half, bicubic | **29 ms** | 143 ms | 213 ms | – | 52 ms | 6.5 ms | – | – |
42-
| thumbnail (cover 400×400) | **13 ms** | 32 ms | – | 28 ms | – | 3.9 ms | – | 1.4 ms |
43-
| crop | **1.0 ms** | 11 ms | 9.2 ms | 7.0 ms | 3.5 ms | 0.73 ms | – | 0.65 ms |
44-
| rotate by 30° | **40 ms** | 385 ms | 417 ms | 317 ms | 136 ms | 28 ms | – | 23 ms |
45-
| rotate by 90° | **5.8 ms** | 29 ms | 14 ms | 82 ms | 96 ms | 3.5 ms | – | 9.1 ms |
46-
| flip | **1.9 ms** | 58 ms | 6.7 ms | 38 ms | 12 ms | 3.1 ms | – | 8.2 ms |
47-
| blur (radius 5) | **46 ms** | 50 s | 420 ms | – | 94 ms | 10 ms | – | 11 ms |
48-
| sharpen | **121 ms** | – | – | – | 67 ms | 126 ms | – | – |
49-
| composite an overlay | **1.6 ms** | 20 ms | 4.8 ms | – | 4.1 ms | 3.9 ms | – | 1.6 ms |
50-
| greyscale | **4.3 ms** | 74 ms | 12 ms | – | 4.6 ms | 16 ms | – | 3.2 ms |
51-
| brightness and contrast | **6.2 ms** | 159 ms | – | – | 20 ms | 9.8 ms | – | 7.6 ms |
52-
| render text | **0.28 ms** | – | – | – | – | 0.30 ms | – | 0.40 ms |
53-
| render SVG | **110 ms** | – | – | – | – | 26 ms | – | 7.2 ms |
24+
| decode JPEG | **54 ms** | 128 ms | 168 ms | 108 ms | 38 ms | 12 ms | – | 18 ms |
25+
| decode PNG | **24 ms** | 51 ms | 92 ms | 63 ms | 20 ms | 16 ms | – | 16 ms |
26+
| decode WebP (lossy) | **71 ms** | – | – | 87 ms | 73 ms | 23 ms | – | 13 ms |
27+
| decode AVIF | **181 ms** | – | – | 1.4 s | – | 69 ms | 181 ms | 49 ms |
28+
| decode JPEG XL | **327 ms** | – | – | fails | – | – | 377 ms | 54 ms |
29+
| decode animated GIF | **51 ms** | – | – | – | – | 56 ms | – | – |
30+
| decode animated WebP | **223 ms** | – | – | – | – | 259 ms | – | – |
31+
| encode JPEG (quality 80) | **50 ms** | 342 ms | 89 ms | 119 ms | 90 ms | 15 ms | – | 23 ms |
32+
| encode PNG | **151 ms** | 198 ms | 278 ms | 477 ms | 86 ms | 115 ms | – | 417 ms |
33+
| encode WebP (quality 80) | **165 ms** | – | – | 105 ms | – | 155 ms | – | 131 ms |
34+
| encode WebP (lossless) | **985 ms** | – | – | 2.2 s | 35 ms | 1.3 s | – | 407 ms |
35+
| encode AVIF (quality 60) | **4.0 s** | – | – | 1.1 s | – | 1.8 s | 2.0 s | – |
36+
| encode JPEG XL (quality 90) | **1.7 s** | – | – | – | – | – | 2.1 s | – |
37+
| encode JPEG XL (lossless) | **580 ms** | – | – | – | – | – | 390 ms | – |
38+
| encode animated GIF | **185 ms** | – | – | – | – | 922 ms | – | – |
39+
| encode animated WebP (q 80) | **796 ms** | – | – | – | – | 647 ms | – | – |
40+
| resize to half | **12 ms** | 13 ms | 74 ms | 53 ms | 48 ms | 8.1 ms | – | 2.8 ms |
41+
| resize to half, bicubic | **36 ms** | 125 ms | 286 ms | – | 75 ms | 9.1 ms | – | – |
42+
| thumbnail (cover 400×400) | **13 ms** | 43 ms | – | 34 ms | – | 4.8 ms | – | 1.1 ms |
43+
| crop | **1.2 ms** | 17 ms | 12 ms | 8.4 ms | 4.6 ms | 0.74 ms | – | 0.56 ms |
44+
| rotate by 30° | **32 ms** | 495 ms | 572 ms | 427 ms | 168 ms | 34 ms | – | 25 ms |
45+
| rotate by 90° | **8.4 ms** | 41 ms | 19 ms | 105 ms | 113 ms | 3.8 ms | – | 11 ms |
46+
| flip | **1.7 ms** | 82 ms | 8.8 ms | 48 ms | 16 ms | 3.6 ms | – | 9.7 ms |
47+
| blur (radius 5) | **65 ms** | 64 s | 692 ms | – | 131 ms | 14 ms | – | 15 ms |
48+
| sharpen | **179 ms** | – | – | – | 91 ms | 166 ms | – | – |
49+
| composite an overlay | **2.0 ms** | 27 ms | 6.5 ms | – | 5.0 ms | 4.4 ms | – | 1.6 ms |
50+
| greyscale | **5.7 ms** | 98 ms | 17 ms | – | 5.1 ms | 20 ms | – | 4.3 ms |
51+
| brightness and contrast | **8.5 ms** | 212 ms | – | – | 23 ms | 12 ms | – | 9.3 ms |
52+
| render text | **0.40 ms** | – | – | – | – | 0.45 ms | – | 0.24 ms |
53+
| render SVG | **121 ms** | – | – | – | – | 30 ms | – | 8.3 ms |
54+
| thumbnail, keeping HDR | **146 ms** | – | – | – | – | 123 ms | – | – |
5455

5556
Encoded sizes:
5657

@@ -76,8 +77,8 @@ Encoded sizes:
7677
| | **ImageScript** | **Jimp** | **image-js** | **PureJsImage** | **Photon** | **sharp** | **jsquash** | **@napi-rs/canvas** |
7778
|---|---|---|---|---|---|---|---|---|
7879
| kind | JavaScript | JavaScript | JavaScript | JavaScript | WebAssembly | native (libvips) | WebAssembly | native (Skia) |
79-
| package | `imagescript@3.15.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-
| install size | 2.4 MB | 26.8 MB | 47.8 MB | 6.7 MB | 2.3 MB | 20.3 MB | 14.2 MB | 35.0 MB |
80+
| package | `imagescript@3.16.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` |
81+
| 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 |
8182
| packages | 1 | 64 | 55 | 1 | 1 | 6 | 3 | 2 |
8283

8384
## Method

‎bench/charts/install.svg‎

Lines changed: 1 addition & 1 deletion
Loading

‎bench/charts/overview-native.svg‎

Lines changed: 4 additions & 4 deletions
Loading

‎bench/charts/overview-portable.svg‎

Lines changed: 4 additions & 4 deletions
Loading

‎bench/installs.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"ImageScript": {
3-
"package": "imagescript@3.15.0",
4-
"bytes": 2425481,
3+
"package": "imagescript@3.16.0",
4+
"bytes": 2487355,
55
"packages": 1
66
},
77
"Jimp": {

‎bench/package-lock.json‎

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎bench/package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"@napi-rs/canvas": "1.0.11",
1313
"@silvia-odwyer/photon-node": "0.3.4",
1414
"image-js": "1.7.1",
15-
"imagescript": "3.15.0",
15+
"imagescript": "3.16.0",
1616
"jimp": "1.6.1",
1717
"purejsimage": "0.17.0",
1818
"sharp": "0.35.5",

0 commit comments

Comments
 (0)