Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Javascript

कैसे भूल गए टाइमर या कॉलबैक जावास्क्रिप्ट में मेमोरी लीक का कारण बन सकते हैं?

<घंटा/>

भूल गए टाइमर/कॉलबैक

जावास्क्रिप्ट में दो टाइमिंग इवेंट होते हैं, अर्थात् सेटटाइमआउट () और सेटइंटरवल ()। पूर्व एक निर्दिष्ट संख्या में मिलीसेकंड की प्रतीक्षा करने के बाद एक फ़ंक्शन निष्पादित करता है, जबकि बाद वाला समय-समय पर एक फ़ंक्शन निष्पादित करता है (समय के प्रत्येक निश्चित अंतराल के लिए दोहराता है)।

जब कोई ऑब्जेक्ट टाइमर कॉलबैक से जुड़ा होता है, तो इसे टाइमआउट होने तक रिलीज़ नहीं किया जाएगा। इस परिदृश्य में टाइमर खुद को रीसेट करता है और टाइमआउट के पूरा होने तक हमेशा के लिए चलता है, कचरा कलेक्टर को मेमोरी को हटाने की अनुमति नहीं देता है। ये टाइमर जावास्क्रिप्ट में मेमोरी लीक का सबसे आम कारण हैं।

उदाहरण

निम्नलिखित उदाहरण में, टाइमर कॉलबैक और इसकी बंधी हुई वस्तु (tiedObject) को टाइमआउट समाप्त होने तक जारी नहीं किया जाएगा। इस बीच टाइमर खुद को रीसेट करता है और हमेशा के लिए चलता है और इसलिए इसका मेमोरी स्पेस कभी भी एकत्र नहीं किया जाएगा यहां तक ​​कि मूल वस्तु का कोई संदर्भ भी नहीं है।

<html>
<body>
<script>
   for (var i = 0; i < 100000; i++) {
   var tiedObject = {
   callAgain: function() {
      var text = this;
      var value = setTimeout(function() {
      text.callAgain();
      }, 100000);
   }
   }
   tiedObject.callAgain();
   tiedObject = null;
   }
</script>
</body>>
</html>

मेमोरी लीक से बचना

1. रिसाव से बचने के लिए सेटइंटरवल ()/सेटटाइमआउट () के अंदर संदर्भ प्रदान करें जैसे कि कचरा एकत्र करने से पहले कार्यों को निष्पादित करने की आवश्यकता होती है।

2. कार्यों को हटाने के लिए सीधे कॉल करें जब उनकी आवश्यकता नहीं रह जाती है।

पुराने ब्राउज़र जैसे IE को छोड़कर, अधिकांश आधुनिक ब्राउज़र जैसे क्रोम आदि को इस तरह की समस्याओं का सामना नहीं करना पड़ेगा। अधिक महत्वपूर्ण बात यह है कि jQuery जैसे पुस्तकालय आंतरिक रूप से यह सुनिश्चित करने के लिए संभालते हैं कि कोई रिसाव समस्या उत्पन्न न हो।



  1. क्रोम में जावास्क्रिप्ट फ़ंक्शन परिभाषा? मुझे ये कैसे मिल सकता है?

    Google Chrome में JavaScript फ़ंक्शन परिभाषा ढूंढने के लिए, वेब ब्राउज़र खोलें और डेवलपर टूल तक पहुंचने के लिए F12 दबाएं. अब Ctrl + Shift + F दबाएं रेगुलर एक्सप्रेशन की जाँच करें जैसा कि नीचे दिखाया गया है - फ़ंक्शन के लिए खोजें और बस इतना ही।

  1. जावास्क्रिप्ट कॉलबैक

    जावास्क्रिप्ट में चूंकि फ़ंक्शन ऑब्जेक्ट होते हैं इसलिए हम उन्हें अन्य फ़ंक्शन के पैरामीटर के रूप में पास कर सकते हैं। इन कार्यों को फिर किसी अन्य फ़ंक्शन के अंदर बुलाया जा सकता है और पारित फ़ंक्शन को कॉलबैक फ़ंक्शन के रूप में संदर्भित किया जाता है। जावास्क्रिप्ट कॉलबैक के लिए कोड निम्नलिखित है - उ

  1. यदि लिंक # से शुरू होता है तो मैं जावास्क्रिप्ट क्लिक फ़ंक्शन को कैसे अक्षम कर सकता हूं?

    इसके लिए जावास्क्रिप्ट में preventDefault() का उपयोग करें। निम्नलिखित जावास्क्रिप्ट कोड है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"&