When rendering a large number of small primitives to a 2D canvas, rendering performance is limited by the CPU. Because each primitive requires an individual API call. There is currently no way to batch 2d context draws (except for paths, but they's intrinsically slower than drawImage). A few years ago, I made a proposal to create a batch version of drawImage(), which I think could go a long way in accelerating sprite-based games and particle animations: https://wiki.whatwg.org/wiki/Canvas_Batch_drawImage . That proposal never went anywhere. Perhaps we should revive that effort. In blink/Chrome we do batching under the hood in skia's GPU backend, which batches the GPU API calls, but we still suffer from lack of batching at the JS API call level. The feedback I got is that before moving forward with the spec, we should make an experimental implementation in at least one major browser to get some stats and prove there is significant performance to be gained in reducing the JS bindings and other per-call overhead.