Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
beleza pessoal?
É o seguinte, estou com um problema chato no firefox por causa do uso do 'setInterval', onde esta havendo o estouro de memória, já procurei na Web por respostas, consegui diminuir a velocidade de alocação de memória, mas mesmo assim depois de um tempo estoura.
Segue o código que estou utilizando:
// Essa primeira parte muda a forma do setInterval trabalhar.
// Retirado de https://developer.mozilla.org/en-US/docs/Web/API/Window.setInterval
// Enable the passage of the 'this' object through the JavaScript timers
var __nativeST__ = window.setTimeout, __nativeSI__ = window.setInterval;
window.setTimeout = function (vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */) {
var oThis = this, aArgs = Array.prototype.slice.call(arguments, 2);
return __nativeST__(vCallback instanceof Function ? function () {
vCallback.apply(oThis, aArgs);
} : vCallback, nDelay);
};
window.setInterval = function (vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */) {
var oThis = this, aArgs = Array.prototype.slice.call(arguments, 2);
return __nativeSI__(vCallback instanceof Function ? function () {
vCallback.apply(oThis, aArgs);
} : vCallback, nDelay);
};
// Nova função setInterval para só iniciar uma nova chamada quando a anterior tiver terminado
// Retirado de http://stackoverflow.com/questions/7499060/setinterval-javascript-are-there-known-bugs
function newSetInterval(f, time) {
setInterval.ids = setInterval.ids || {};
setInterval.idCount = setInterval.idCount || 0;
var that = this,
id = setInterval.idCount++,
// to prevent firefox bug that adds an extra element to the arguments
l = arguments.length - 2;
(function theFn() {
// to prevent firefox bug that adds an extra element to the arguments
var args = [].slice.call(arguments, 0, l);
f.apply(this, args);
setInterval.ids[id] = setTimeout.apply(this, [theFn, time].concat(args));
}).apply(that, [].slice.call(arguments, 2, arguments.length));
return id;
}
Esses métodos diminuiu bastante a alocação de memória, mas não resolveu meu problema, se alguém poder dar uma luz agradeço.
Obs.: Foi mal pelo acento errado no título, se o moderador poder alterar agradeço.
você deve estar fazendo algo errado pra chegar a acontecer isso, aonde você esta dando os intervals?
valeu pela ajuda,
estou usando uma chamada normal de interval.
newSetInterval( ativa_jogo, 3000 );
Mesmo usando o padrão de setInterval(ativa_jogo, 3000); gera esse bug, por isso passei para métodos alternativos
assim, é difíficil saber oq acontece. eu faria o seguinte
a - o interval esta em algum loop?
b - quanto tempo cada interval demora p/ ser executado
c - da tempo para cada interval ser executado em 3 segundos(assumindo q somente 1 esteja ativo a qualquer momento)?
se em média cada interval demorar + q 3 segundos(no seu caso) então eventualmente vai faltar memoria, isso é fato.
vc deve estar fazendo algo errado pra chegar a acontecer isso, aonde vc esta dando os intervals?