Questo è il mio codice scritto in javascript, che ha il piccolo problema che ciclo dopo ciclo rallenta sempre di più. Vorrei sapere come risolvere questo problema, dei consigli su come migliorare il codice e capire se se è solo ed esclusivamente un problema di ottimizzazione e non di RAM, CACHE o altro relativo al computer invece che al browser. Grazie! 
codice:
var capsLock = false;
window.addEventListener("keydown", play, false);
var recOn = false;
var recOff = false;
var backColor = false;
var doubleKey = 0;
var unitTime = 10;
var soundKit = 0;
var img = 0;
var numImg = 3;
var layer = 0;
var maxLayer = 2;
var mp3 = [];
var setInt = [];
var firstNum = [];
var seqKey = [];
var setEnd = [];
var numSeq = [];
var startLoop = [];
var playLoop = [];
var endLoop = [];
var incTime = [];
var findKey = [];
function backGround() {
/*document.body.style.backgroundColor = "white";
setTimeout(function() { document.body.style.backgroundColor = "black"; },100);*/
if (backColor===false) {
backColor = true;
document.body.style.backgroundColor = "white";
} else {
backColor = false;
document.body.style.backgroundColor = "black";
}
}
function changeImage(key) {
document.getElementById('d1').style.backgroundImage="url('GIF/"+soundKit+"/"+key+".gif')";
}
function overlapImage() {
var div = document.createElement("div");
div.id = "i"+img;
div.className = "d2";
document.body.appendChild(div);
document.getElementById("i"+img).style.backgroundImage="url('PNG/"+soundKit+"/"+img+".gif')";
document.getElementById("i"+img).style.zIndex=layer;
img++;
layer++;
if (img>maxLayer) {
parent = document.getElementById("d0");
img = img-maxLayer-1;
child = document.getElementById("i"+img);
parent.removeChild(child);
}
if (img>numImg) {
img = 0;
}
}
kit();
for (i=48;i<58;i++) {
startLoop[i] = false;
playLoop[i] = false;
endLoop[i] = false;
findKey[i] = false;
incTime[i] = 0;
}
setInterval(function () {
for (i=48;i<=57;i++) {
if (startLoop[i]==true) {
if (playLoop[i]==false) {
playLoop[i] = true;
loop(i);
}
} else {
clearInterval(setInt[i]);
}
}
}, unitTime);
function play(e) {
key = e.keyCode;
if (key==32) {
if (recOn==false) {
recOn = true;
seqKey = [];
start = parseInt(Date.now()/unitTime);
} else {
recOn = false;
recOff = true;
stop = parseInt((Date.now()/unitTime)-newTime);
setEnd[stop] = key;
seqKey = seqKey.concat(setEnd);
seqKey = seqKey.toString();
for (j=0;j!=-1;j++) {
comma = seqKey.charAt(j);
if (comma!=",") {
seqKey = seqKey.substring(j);
break;
}
}
}
} else if (recOn==true) {
doubleKey++;
newTime = parseInt(Date.now()/unitTime);
lap = parseInt((Date.now()/unitTime)-start);
seqKey[lap] = key;
} else if (key>47 && key<58) {
num = e.keyCode;
if (recOff==true) {
recOff = false;
seqKey = seqKey.toString();
numSeq[num] = seqKey;
//alert(seqKey);
seqKey = [];
setEnd = [];
} else if (recOff==false) {
if (startLoop[num]==false) {
startLoop[num] = true;
} else {
startLoop[num] = false;
playLoop[num] = false;
}
}
} else if (key==20) {
if (capsLock==false) {
capsLock = true;
img = 0;
document.getElementById('d1').style.backgroundImage="none";
document.body.style.backgroundColor = "white";
//alert("1");
} else {
capsLock = false;
//alert("0");
}
} else if (key==37 || key==39) {
if (key==37 && soundKit!=0) {
soundKit--;
kit();
} else if (key==39) {
soundKit++;
kit();
}
}
if (capsLock==false) {
backGround();
changeImage(key);
} else {
overlapImage();
}
mp3[key].currentTime = 0;
mp3[key].play();
}
function loop(num) {
findKey[num] = false;
if (endLoop[num]==true) {
endLoop[num] = false;
incTime[num] = 0;
}
setInt[num] = setInterval(function () {
res = numSeq[num].charAt(incTime[num]);
if (res!="," && findKey[num]==false) {
findKey[num] = true;
firstNum = [];
for (i=0;i<2;i++) {
firstNum[i] = numSeq[num].charAt(incTime[num]+i);
}
firstNum = firstNum.toString();
str = firstNum.replace( /,/g, "" );
if (str=="32") {
endLoop[num] = true;
clearInterval(setInt[num]);
return loop(num);
}
if (capsLock==false) {
backGround();
changeImage(str);
} else {
overlapImage();
}
mp3[str].currentTime = 0;
mp3[str].play();
} else { findKey[num] = false; }
incTime[num]++;
}, unitTime);
}
function kit() {
for (i=65;i<=90;i++) {
mp3[i] = new Audio("KIT/"+soundKit+"/"+i+".mp3");
}
}