var img = new Image();
var imageBitmap;
var doneLoading = false;
var canvasImage = document.createElement('canvas');
canvasImage.width = 700;
canvasImage.height = 700;
var canvasImageBitmap = document.createElement('canvas');
canvasImageBitmap.width = 700;
canvasImageBitmap.height = 700;
var canvas = document.createElement('canvas');
canvas.width = 700;
canvas.height = 700;
var canvasCanvas = document.createElement('canvas');
canvasCanvas.width = 700;
canvasCanvas.height = 700;
var ctxImage = canvasImage.getContext('2d');
var ctxImageBitmap = canvasImageBitmap.getContext('2d');
var ctx = canvas.getContext('2d');
var ctxCanvas = canvasCanvas.getContext('2d');
async function globalMeasureThatScriptPrepareFunction() {
return new Promise((resolve, reject) => {
img.addEventListener('load', function() {
createImageBitmap(img)
.then(function(bitmap) {
imageBitmap = bitmap;
debugger;
doneLoading = true;
console.log("bitmap preparation done");
resolve(true);
}, false);
ctx.drawImage(img, 0, 0);
console.log("canvas preparation done");
});
img.src = 'https://1.bp.blogspot.com/-52MtzD0GfX0/WvP52CL1WjI/AAAAAAAAOVw/_OpK4JHeWK01d-7IiZ6vzojYGhXqLRXrACLcBGAs/s1600/EMxediL.jpg';
});
}
ctxImage.drawImage(img,0,0);
ctxImageBitmap.drawImage(imageBitmap,0,0);
ctxCanvas.drawImage(canvas,0,0);
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
Image | |
ImageBitmap | |
Canvas |
Test name | Executions per second |
---|---|
Image | 1276279.0 Ops/sec |
ImageBitmap | 15453.3 Ops/sec |
Canvas | 11876.9 Ops/sec |
The benchmark provided evaluates three different ways to draw images on HTML5 canvases: using an Image
, an ImageBitmap
, and a Canvas
. Below, let's outline the main aspects of what each approach is measuring, their pros and cons, additional considerations, and possible alternatives.
Image (ctxImage.drawImage(img, 0, 0)
)
Image
object onto the canvas.ImageBitmap (ctxImageBitmap.drawImage(imageBitmap, 0, 0)
)
ImageBitmap
, which is a bitmap representation of images that can be rendered to a canvas.ImageBitmap
after loading the image.Canvas (ctxCanvas.drawImage(canvas, 0, 0)
)
canvas
element, which could be pre-rendered graphics.Image
and createImageBitmap
, which can introduce complications in settings like responsiveness. Ensuring content is loaded before rendering is critical.Image
may suffice. For improved performance with frequently drawn images, ImageBitmap
can be more beneficial. Use canvas-to-canvas drawing for layered visuals or when a straightforward image may not suffice.ImageData
object can offer high flexibility for certain use cases, particularly when transformations and effects are required.In conclusion, the choice of whether to use an Image
, ImageBitmap
, or Canvas
depends largely on the specific requirements of the application, including performance demands, complexity of the graphical elements, and rendering efficiency.