The prefetch for bytes is slightly different to the loading required for drawing it onto a canvas.
We actually don’t need the bytes for that.
But we do need to create an HTML Image Element for the canvas to draw and that’s what’s happening on the first render.
That’s why pre-drawing it on another canvas helps with caching.
You’ve probably done something like
dummy_canvas = Canvas()
dummy_canvas.draw_image(my_image)
Or, since it’s in the init method you can just use the main canvas.
(at this stage it has no height or width so it won’t be visible on load).