Fastest canvas drawing with no rotation (v33)

Revision 33 of this benchmark created by HotSix on


Description

What is the fastest way to draw on a canvas? Image from public URL? Image from data URL? Canvas used as image?

I'm testing this to know what method to use for storing and blitting tiles in a 2D tile engine.

Preparation HTML

<canvas id='canvas' width=400 height=300>
</canvas>
<script>
  var canvas = document.getElementById('canvas');
  var ctx = canvas.getContext('2d');

  var url = 'http://www.freegreatdesign.com/files/images/6/2865-weather-png-icon-7-3.jpg';
  var pattern, patterncvs;
  var cvsimg = document.createElement('canvas');
  var img = new Image(),
      tdimg = new Image();

  img.onload = function() {
    var t = document.createElement('canvas');
    var c = t.getContext('2d');
    t.width = img.width;
    t.height = img.height;
    cvsimg.width = img.width;
    cvsimg.height = img.height;
    c.drawImage(img, 0, 0);

    cvsimg.getContext('2d').drawImage(img, 0, 0);

    pattern = ctx.createPattern(img, 'no-repeat');
    patterncvs = ctx.createPattern(cvsimg, 'no-repeat');

  }

  img.src = url;

  tdimg.src = "data:image/jpeg;base64,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";
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Web URL Image
ctx.rotate(10);
ctx.drawImage(img, 50, 50, 128, 128);
ready
data URL Image
ctx.rotate(10);
ctx.drawImage(tdimg, 50, 50, 128, 128);
ready
Canvas Image
ctx.rotate(10);
ctx.drawImage(cvsimg, 50, 50, 128, 128);
ready
Pattern of web URL image
ctx.rotate(10);
ctx.translate(50, 50);
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, 128, 128);
ctx.translate(-50, -50);
ready
Pattern of canvas
ctx.rotate(10);
ctx.translate(50, 50);
ctx.fillStyle = patterncvs;
ctx.fillRect(0, 0, 128, 128);
ctx.translate(-50, -50);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.