2014-12-20 16 views
12

मुझे लगता है कि setInterval का इस्तेमाल करते हैं JavaScript लाइब्रेरी के एक जोड़े में देखा है, कि पुस्तकालय, window के unload घटना के लिए एक घटना श्रोता बाध्य होगा ताकि सभी बनाया अंतराल clearInterval का उपयोग कर खाली करने के लिए।विंडो अनलोड से पहले अंतराल को साफ़ करने का कारण?

एक उदाहरण History.js है जो "List of intervals set, to be cleared when document is unloaded" रखता है।

स्निपेट:

// ==================================================================== 
// 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; 
    } 
}; 

घटना श्रोता unload घटना पर इस समारोह here जोड़ा जाता है कहता है कि।

स्निपेट:

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

तो, मेरे सवाल, क्यों कुछ जावास्क्रिप्ट लेखकों ऐसा करते हैं है? ऐसा लगता है जैसे ब्राउज़र पृष्ठ को छोड़ते समय इन अंतराल को स्वचालित रूप से साफ़ कर दिया जाएगा (मैंने इसे अन्यथा कभी नहीं देखा है)। क्या ऐसा करने का कोई फायदा है? क्या यह किसी प्रकार की ब्राउज़र बग की क्षतिपूर्ति करता है? यदि हां, तो कौन सा बग और कौन से ब्राउज़र प्रभावित करते हैं?

+2

दिलचस्प सवाल अगर ऐसा करने का एक वैध कारण है। मैं हालांकि एक नहीं देखता हूं। – Jonathan

+1

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

+0

इतिहास.जेएस के लेखकों से संपर्क क्यों न करें, उनके ईमेल https://github.com/browserstate/history.js के नीचे हैं (हालांकि उपर्युक्त टिप्पणी ऐसा लगता है कि इसे Env.js पर किसी प्रकार की निर्भरता के साथ करना है) –

उत्तर

3

टिप्पणियों में उल्लिखित अनुसार, this code was added to History.js for compatibility with Env.js

Env.js जावास्क्रिप्ट में लिखा गया एक हेडलेस ब्राउज़र है जो अब सक्रिय विकास के अधीन नहीं है। तो यह कम से कम कहने के लिए निश्चित रूप से एक बढ़त मामला है। मुझे लगता है कि यह मुद्दा जावास्क्रिप्ट की सीमा के कारण होता है।

उपयोगकर्ता लांस लियोनार्ड ने टिप्पणियों में बताया है कि possible memory leak issue in IE 10 है।

+2

क्या आपने http: // stackoverflow देखा है।com/प्रश्न/15905652/वैकल्पिक हल के लिए IE10-setInterval-स्मृति-रिसाव/15,919,452 # 15,919,452? –

संबंधित मुद्दे