Skip to content

Latest commit

 

History

History
119 lines (104 loc) · 11.1 KB

File metadata and controls

119 lines (104 loc) · 11.1 KB

Canvas Benchmarks · 26 Sept 2025

Configuration

  • 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

Libraries Tested

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