render-vs-prerender

JavaScript performance comparison

Revision 109 of this test case created by and last updated

Preparation code

<canvas id="canvas1" width="500" height="500"></canvas>
<script>
  var can = document.getElementById('canvas1');
  var ctx = can.getContext('2d');
  
  var can2 = document.createElement('canvas');
  can2.width = 20;
  can2.height = 20;
  var ctx2 = can2.getContext('2d');
  ctx2.fillRect(0, 0, 20, 20);

  var path = new Path2D();
for (i = 0; i < 1000; i++) {
  var x = Math.random() * 500;
  var y = Math.random() * 500;
  path.rect(x, y, 20, 20);
}
    

</script>
    

Preparation code output

<canvas id="canvas1" width="500" height="500"></canvas>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in CCBot 2.0.0 / Other 0.0.0
Test Ops/sec
fill path
ctx.fill(path);
pending…
fill rect
for (i = 0; i < 1000; i++) {
  var x = Math.random() * 500;
  var y = Math.random() * 500;
  ctx.fillRect(x, y, 20, 20);
}
    
pending…
drawImage
for (i = 0; i < 1000; i++) {
  var x = Math.random() * 500;
  var y = Math.random() * 500;
  ctx.drawImage(can2, x, y, 10, 10);
}
    
    
pending…
arc
for (i = 0; i < 1000; i++) {
  var x = Math.random() * 500;
  var y = Math.random() * 500;
  ctx.beginPath();
  ctx.arc(x, y, 10, 0, 360);
  ctx.fill();
}
    
    
pending…
batched arc
ctx.beginPath();
for (i = 0; i < 1000; i++) {
  var x = Math.random() * 500;
  var y = Math.random() * 500;
  ctx.arc(x, y, 10, 0, 360);
}
ctx.fill();
    
    
pending…
fill rect w/ no-op fill change
for (i = 0; i < 1000; i++) {
  var x = Math.random() * 500;
  var y = Math.random() * 500;
  ctx.fillStyle = "rgb(200,0,0)";
  ctx.fillRect(x, y, 20, 20);
}
    
pending…
pixel-aligned fillrect
for (i = 0; i < 1000; i++) {
  var x = Math.random() * 500;
  var y = Math.random() * 500;
  ctx.fillRect(x | 0, y | 0, 20, 20);
}
    
pending…
pixel aligned draw img
for (i = 0; i < 1000; i++) {
  var x = Math.random() * 500;
  var y = Math.random() * 500;
  ctx.drawImage(can2, x | 0, y | 0, 10, 10);
}
    
    
pending…

Compare results of other browsers

Revisions

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

0 Comments