Canvas Benchmarks · 26 Sept 2025
System : MacBook Air (13-inch, M3, 2024) / Apple Inc. Mac15,12
CPU : Apple M3 (2.4 GHz, 8 cores)
GPU : Apple M3 / Apple (Built-In, 10 cores)
Memory : 24.00 GiB total (347.58 MiB free)
OS : macOS 15.6 (Sequoia)
Node : 24.6.0
Note: Skia Canvas is tested running in two modes: serial and async. When running serially, each rendering operation is awaited before continuing to the next test iteration. When running asynchronously, all the test iterations are begun at once and are executed in parallel within a Promise.all block, making use of the library’s multi-threading.
Library
Per Run
Total Time (100 iterations)
canvaskit-wasm
25 ms
2.47 s
canvas
88 ms
8.77 s
@napi-rs/canvas
69 ms
6.87 s
skia-canvas
<1 ms
33 ms
Library
Per Run
Total Time (200 iterations)
canvaskit-wasm 👁️
22 ms
4.48 s
canvas 👁️
16 ms
3.28 s
@napi-rs/canvas 👁️
14 ms
2.86 s
skia-canvas (serial) 👁️
16 ms
3.23 s
skia-canvas (async) 👁️
3 ms
629 ms
Note: canvaskit-wasm renders the shapes, but positions them incorrectly
Library
Per Run
Total Time (200 iterations)
canvaskit-wasm 👁️
39 ms
7.73 s
canvas 👁️
75 ms
15.04 s
@napi-rs/canvas 👁️
49 ms
9.72 s
skia-canvas (serial) 👁️
38 ms
7.57 s
skia-canvas (async) 👁️
7 ms
1.40 s
Library
Per Run
Total Time (20 iterations)
canvaskit-wasm 👁️
790 ms
15.81 s
canvas 👁️
486 ms
9.72 s
@napi-rs/canvas 👁️
230 ms
4.60 s
skia-canvas (serial) 👁️
137 ms
2.74 s
skia-canvas (async) 👁️
28 ms
558 ms
Library
Per Run
Total Time (100 iterations)
canvaskit-wasm
—————
————— not supported
canvas 👁️
122 ms
12.16 s
@napi-rs/canvas 👁️
84 ms
8.42 s
skia-canvas (serial) 👁️
58 ms
5.83 s
skia-canvas (async) 👁️
11 ms
1.08 s
Note: canvas & napi-rs convert the input SVG to a bitmap rather than exporting it as a vector
Library
Per Run
Total Time (200 iterations)
canvaskit-wasm
—————
————— not supported
canvas 👁️
33 ms
6.55 s
@napi-rs/canvas 👁️
35 ms
6.97 s
skia-canvas (serial) 👁️
4 ms
711 ms
skia-canvas (async) 👁️
3 ms
634 ms
Note: canvas converts the input SVG to a bitmap rather than exporting it as a vector
Library
Per Run
Total Time (200 iterations)
canvaskit-wasm
—————
————— not supported
canvas 👁️
27 ms
5.31 s
@napi-rs/canvas
—————
————— not supported
skia-canvas (serial) 👁️
5 ms
950 ms
skia-canvas (async) 👁️
2 ms
333 ms
Library
Per Run
Total Time (50 iterations)
canvaskit-wasm 👁️
274 ms
13.72 s
canvas 👁️
283 ms
14.13 s
@napi-rs/canvas 👁️
112 ms
5.60 s
skia-canvas (serial) 👁️
100 ms
5.00 s
skia-canvas (async) 👁️
19 ms
935 ms
Library
Per Run
Total Time (150 iterations)
canvaskit-wasm
—————
————— not supported
canvas 👁️
67 ms
10.02 s
@napi-rs/canvas 👁️
41 ms
6.14 s
skia-canvas (serial) 👁️
67 ms
10.05 s
skia-canvas (async) 👁️
57 ms
8.60 s
Library
Per Run
Total Time (150 iterations)
canvaskit-wasm 👁️
97 ms
14.53 s
canvas 👁️
52 ms
7.76 s
@napi-rs/canvas 👁️
46 ms
6.95 s
skia-canvas (serial) 👁️
50 ms
7.51 s
skia-canvas (async) 👁️
9 ms
1.33 s
Library
Per Run
Total Time (200 iterations)
canvaskit-wasm 👁️
24 ms
4.75 s
canvas 👁️
24 ms
4.88 s
@napi-rs/canvas 👁️
19 ms
3.83 s
skia-canvas (serial) 👁️
21 ms
4.26 s
skia-canvas (async) 👁️
4 ms
819 ms