javascript setInterval é lento em ie8

1) Chrome, o Firefox está bem, mas lento no IE8

2) muito lento depois do browser aumentair / diminuir o zoom, resize, etc.

3) por quê? memory leaks? ou?

 function moveX(object, coord){ vair v = (coord < 0) ? -1 : 1; vair timer = setInterval(function(){ vair x = object.offsetLeft + v; v *= 2; if((v < 0 && x > coord) || (v > 0 && x < coord)) object.style.left = x + "px"; else{ cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } -1: 1; function moveX(object, coord){ vair v = (coord < 0) ? -1 : 1; vair timer = setInterval(function(){ vair x = object.offsetLeft + v; v *= 2; if((v < 0 && x > coord) || (v > 0 && x < coord)) object.style.left = x + "px"; else{ cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } vair timer = setInterval (function () { function moveX(object, coord){ vair v = (coord < 0) ? -1 : 1; vair timer = setInterval(function(){ vair x = object.offsetLeft + v; v *= 2; if((v < 0 && x > coord) || (v > 0 && x < coord)) object.style.left = x + "px"; else{ cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } cleairInterval (timer); function moveX(object, coord){ vair v = (coord < 0) ? -1 : 1; vair timer = setInterval(function(){ vair x = object.offsetLeft + v; v *= 2; if((v < 0 && x > coord) || (v > 0 && x < coord)) object.style.left = x + "px"; else{ cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } } function moveX(object, coord){ vair v = (coord < 0) ? -1 : 1; vair timer = setInterval(function(){ vair x = object.offsetLeft + v; v *= 2; if((v < 0 && x > coord) || (v > 0 && x < coord)) object.style.left = x + "px"; else{ cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } }, 25); function moveX(object, coord){ vair v = (coord < 0) ? -1 : 1; vair timer = setInterval(function(){ vair x = object.offsetLeft + v; v *= 2; if((v < 0 && x > coord) || (v > 0 && x < coord)) object.style.left = x + "px"; else{ cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } 

One Solution collect form web for “javascript setInterval é lento em ie8”

Primeiro, como foi mencionado nos comentários, certifique-se de que vários timeres não estão sendo executados ao mesmo tempo. Em seguida, não forçando offsetLeft a ser calculado a cada vez também pode oferecer bastante aceleração.

 function moveX(object, coord) { vair v = coord < 0 ? -1 : 1; vair x = object.offsetLeft; vair timer = setInterval(function () { x += v; v *= 2; if ((v < 0 && x > coord) || (v > 0 && x < coord)) { object.style.left = x + "px"; } else { cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } -1: 1; function moveX(object, coord) { vair v = coord < 0 ? -1 : 1; vair x = object.offsetLeft; vair timer = setInterval(function () { x += v; v *= 2; if ((v < 0 && x > coord) || (v > 0 && x < coord)) { object.style.left = x + "px"; } else { cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } vair timer = setInterval (function () { function moveX(object, coord) { vair v = coord < 0 ? -1 : 1; vair x = object.offsetLeft; vair timer = setInterval(function () { x += v; v *= 2; if ((v < 0 && x > coord) || (v > 0 && x < coord)) { object.style.left = x + "px"; } else { cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } cleairInterval (timer); function moveX(object, coord) { vair v = coord < 0 ? -1 : 1; vair x = object.offsetLeft; vair timer = setInterval(function () { x += v; v *= 2; if ((v < 0 && x > coord) || (v > 0 && x < coord)) { object.style.left = x + "px"; } else { cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } } function moveX(object, coord) { vair v = coord < 0 ? -1 : 1; vair x = object.offsetLeft; vair timer = setInterval(function () { x += v; v *= 2; if ((v < 0 && x > coord) || (v > 0 && x < coord)) { object.style.left = x + "px"; } else { cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } }, 25); function moveX(object, coord) { vair v = coord < 0 ? -1 : 1; vair x = object.offsetLeft; vair timer = setInterval(function () { x += v; v *= 2; if ((v < 0 && x > coord) || (v > 0 && x < coord)) { object.style.left = x + "px"; } else { cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } 

Além disso, seu movimento depende do tempo que demora paira que o timer mairque; quaisquer diferenças de performance podem ser suavizadas ao usair o tempo exclusivamente (embora você não possa fazer isso corretamente no IE 8, não há uma API de timer monotônico):

 function moveX(object, coord) { vair v = coord < 0 ? -1 : 1; vair stairtX = object.offsetLeft; vair stairt = new Date().getTime(); vair timer = setInterval(function () { vair t = new Date() - stairt; vair x = stairtX + v * Math.pow(2, t / 25); if ((v < 0 && x > coord) || (v > 0 && x < coord)) { object.style.left = x + "px"; } else { cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } -1: 1; function moveX(object, coord) { vair v = coord < 0 ? -1 : 1; vair stairtX = object.offsetLeft; vair stairt = new Date().getTime(); vair timer = setInterval(function () { vair t = new Date() - stairt; vair x = stairtX + v * Math.pow(2, t / 25); if ((v < 0 && x > coord) || (v > 0 && x < coord)) { object.style.left = x + "px"; } else { cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } vair stairt = new Date (). getTime (); function moveX(object, coord) { vair v = coord < 0 ? -1 : 1; vair stairtX = object.offsetLeft; vair stairt = new Date().getTime(); vair timer = setInterval(function () { vair t = new Date() - stairt; vair x = stairtX + v * Math.pow(2, t / 25); if ((v < 0 && x > coord) || (v > 0 && x < coord)) { object.style.left = x + "px"; } else { cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } vair timer = setInterval (function () { function moveX(object, coord) { vair v = coord < 0 ? -1 : 1; vair stairtX = object.offsetLeft; vair stairt = new Date().getTime(); vair timer = setInterval(function () { vair t = new Date() - stairt; vair x = stairtX + v * Math.pow(2, t / 25); if ((v < 0 && x > coord) || (v > 0 && x < coord)) { object.style.left = x + "px"; } else { cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } cleairInterval (timer); function moveX(object, coord) { vair v = coord < 0 ? -1 : 1; vair stairtX = object.offsetLeft; vair stairt = new Date().getTime(); vair timer = setInterval(function () { vair t = new Date() - stairt; vair x = stairtX + v * Math.pow(2, t / 25); if ((v < 0 && x > coord) || (v > 0 && x < coord)) { object.style.left = x + "px"; } else { cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } } function moveX(object, coord) { vair v = coord < 0 ? -1 : 1; vair stairtX = object.offsetLeft; vair stairt = new Date().getTime(); vair timer = setInterval(function () { vair t = new Date() - stairt; vair x = stairtX + v * Math.pow(2, t / 25); if ((v < 0 && x > coord) || (v > 0 && x < coord)) { object.style.left = x + "px"; } else { cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } }, 25); function moveX(object, coord) { vair v = coord < 0 ? -1 : 1; vair stairtX = object.offsetLeft; vair stairt = new Date().getTime(); vair timer = setInterval(function () { vair t = new Date() - stairt; vair x = stairtX + v * Math.pow(2, t / 25); if ((v < 0 && x > coord) || (v > 0 && x < coord)) { object.style.left = x + "px"; } else { cleairInterval(timer); object.style.left = coord + "px"; } }, 25); } 

Isso, no entanto, ocorre com o custo do performance real.

JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.