2014-12-20 15 views
12

Ho notato in un paio di librerie JavaScript che fanno uso di setInterval, che la libreria legherà un listener di eventi all'evento windowunload, in modo da cancellare tutti gli intervalli creati utilizzando clearInterval.Reason to clearInterval before the window scaricate?

Un esempio è History.js che mantiene uno "List of intervals set, to be cleared when document is unloaded".

Snippet:

// ==================================================================== 
// Interval record 

/** 
* History.intervalList 
* List of intervals set, to be cleared when document is unloaded. 
*/ 
History.intervalList = []; 

/** 
* History.clearAllIntervals 
* Clears all setInterval instances. 
*/ 
History.clearAllIntervals = function(){ 
    var i, il = History.intervalList; 
    if (typeof il !== "undefined" && il !== null) { 
     for (i = 0; i < il.length; i++) { 
      clearInterval(il[i]); 
     } 
     History.intervalList = null; 
    } 
}; 

Il listener di eventi che chiama questa funzione sull'evento unload si aggiunge here.

Snippet:

/** 
* Clear Intervals on exit to prevent memory leaks 
*/ 
History.Adapter.bind(window,"unload",History.clearAllIntervals); 

Quindi, la mia domanda è, perché alcuni autori JavaScript fanno questo? Sembra che questi intervalli verranno cancellati automaticamente quando il browser lascia la pagina (non l'ho mai visto fare diversamente). C'è un vantaggio nel fare questo? Compensa un bug del browser di qualche tipo? In tal caso, quale bug e quali browser influisce?

+2

Interessante domanda se c'è un motivo valido per farlo. Non ne vedo uno però. – Jonathan

+1

https://github.com/browserstate/history.js/commit/91a5c5bcd63cb5fc35e786de3a11218ea69e65bc – zerkms

+0

Perché non contattare gli autori di history.js, le loro e-mail sono nella parte inferiore di https://github.com/browserstate/history.js (anche se il commento sopra sembra che abbia a che fare con una sorta di dipendenza da Env.js) –

risposta

3

Come menzionato nei commenti, this code was added to History.js for compatibility with Env.js.

Env.js è un browser headless scritto in JavaScript che non è più in fase di sviluppo attivo. Quindi questo è sicuramente un caso limite, per non dire altro. Suppongo che questo problema sia causato da una limitazione di JavaScript.

Utente Lance Leonard ha sottolineato nei commenti che esiste uno possible memory leak issue in IE 10.

+2

Hai visto http: // StackOverflow.com/domande/15905652/soluzione-per-IE10-setInterval-memory-perdita/15.919.452 # 15.919.452? –