Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wesley David

setInterval - Estoura mémoria no Firefox

Recommended Posts

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.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.