JSFiddle - React, Tailwind, and code Playground

HTML

<canvas id="canvas" width="800" height="600"></canvas>
<canvas id="canvasII" width="800" height="600"></canvas>
<canvas id="canvasIII" width="800" height="600"></canvas>
<canvas id="canvasIV" width="800" height="600"></canvas>

CSS

body{
    margin:0px;
    padding:0px;
    width:100%;
    height:100%;
}
canvas{
    position:absolute;
    left:0px;
    top:0px;
    margin:0px;
    padding:0px;
    image-rendering: optimizeSpeed;
    image-rendering: -moz-crisp-edges;
    image-rendering: -webkit-optimize-contrast;
    image-rendering: optimize-contrast;
    -ms-interpolation-mode: nearest-neighbor;
}

JavaScript

window.requestAnimFrame = (function(){
				return window.requestAnimationFrame	|| 
				window.webkitRequestAnimationFrame	|| 
				window.mozRequestAnimationFrame		|| 
				window.oRequestAnimationFrame		|| 
				window.msRequestAnimationFrame		|| 
				function(callback){
					window.setTimeout(callback, 1000 / 60);
				};
			})();
			
			var numberOfObjects = 2000;
			var canvas,canvasII,canvasIII,canvasIV,canvasV;
			var ctx,ctxII,ctxIII,ctxIV,ctxV;
			var objects = [];
			var imgToDraw;
			var coords = {x:100,y:100};
			var radio = 30;

			for(var i = 0; i < numberOfObjects*10; i++){
				objects.push({position:0});
			}

			function draw(){
				window.requestAnimFrame(draw);
				ctx.clearRect(0,0,canvas.width,canvas.height);  
				for(var nObject = ((numberOfObjects*1)-numberOfObjects); nObject < numberOfObjects*1; nObject++){
					ctx.save();
					ctx.translate(coords.x,coords.y);
					ctx.rotate(objects[nObject].position/100);
					ctx.translate(radio,0);
					ctx.drawImage(imgToDraw,0,0);
					ctx.restore();
					objects[nObject].position++;
				}
			}
			function drawII(){
				window.requestAnimFrame(drawII);
				ctxII.clearRect(0,0,canvas.width,canvas.height);
				for(var nObject = ((numberOfObjects*2)-numberOfObjects); nObject < numberOfObjects*2; nObject++){
					ctxII.save();
					ctxII.translate(coords.x,coords.y);
					ctxII.rotate((objects[nObject].position-40)/100);
					ctxII.translate(radio,0);
					ctxII.drawImage(imgToDraw,0,0);
					ctxII.restore();
					objects[nObject].position++;
				}
			}
			function drawIII(){
				window.requestAnimFrame(drawIII);
				ctxIII.clearRect(0,0,canvas.width,canvas.height);
				for(var nObject = ((numberOfObjects*3)-numberOfObjects); nObject < numberOfObjects*3;...