Ho notato in un paio di librerie JavaScript che fanno uso di setInterval
, che la libreria legherà un listener di eventi all'evento window
unload
, 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?
Interessante domanda se c'è un motivo valido per farlo. Non ne vedo uno però. – Jonathan
https://github.com/browserstate/history.js/commit/91a5c5bcd63cb5fc35e786de3a11218ea69e65bc – zerkms
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) –