पर एक JQuery यूआई संवाद को नष्ट मैं एक जवाब है, या कोई लाभ नहीं हुआ इस विशेष मुद्दे को भी एक संदर्भ के लिए सब कुछ खत्म हो खोज की है। मैं JQuery UI 1.8.7 और JQuery 1.5.1 का उपयोग कर रहा हूं। मेरे पास एक संवाद है कि मैं न केवल करीब से नष्ट करना चाहता हूं, बल्कि डीओएम से भी करीब हटना चाहता हूं। यह फ़ायरफ़ॉक्स में ठीक काम करता है। हालांकि, जब मैं आईई 7 में एक ही काम करता हूं, तो मुझे ब्राउज़र के लिए मेमोरी उपयोग में 6 एमबी स्पाइक दिखाई देता है, और जब तक मैं ब्राउज़र को पूरी तरह से बंद नहीं करता तब तक यह स्मृति पुनः प्राप्त नहीं होती है। तो मेरा पहला विचार था, मेरे संवाद में कुछ स्मृति रिसाव पैदा कर रहा है। मैं सब कुछ है कि मैं जोड़ने था बाहर छीन लिया, और निम्नलिखित कोड का उपयोग कर एक सरल संवाद बनाया:बड़े पैमाने पर IE7 मेमोरी लीक जब करीब
$('<div id="testMe">hello</div>').dialog({
modal: true,
autoOpen: true,
close: function() { $(this).dialog('destroy'); }
});
जब मैं इस संवाद खोलने, इसे बंद, और फिर ब्राउज़र को ताज़ा। मैं हमेशा पहले की तुलना में ~ 6 एमबी अधिक स्मृति के साथ समाप्त होता हूं। अगर मैं इस संवाद को खोलता हूं, लेकिन फिर इसे बंद करने से पहले ब्राउज़र को रीफ्रेश करें, तो मुझे कोई मेमोरी स्पाइक दिखाई नहीं देता है। मुझे नहीं पता कि इसका क्या कारण हो सकता है - मुझे सामान्य JQuery UI मेमोरी लीक के बारे में धागे का एक गुच्छा मिला है, लेकिन किसी भी फिक्स ने मेरी स्थिति का समाधान करने के लिए कुछ भी नहीं किया है।
मैं यह भी सोचा कि शायद अपने प्रोजेक्ट में कुछ अन्य कोड रास्ते में हो रही थी। यह मामला नहीं है - अगर मैं इस जेएसएफल्ड उदाहरण का उपयोग कर एक ही काम करता हूं, तो मुझे मेमोरी स्पाइक भी मिलती है! (http://jsfiddle.net/n68Af/1/)। इस बिंदु पर, मुझे नहीं पता कि कहां बारी है या क्या करना है। मुझे इन संवादों को नष्ट करने और उन्हें डीओएम से हटाने की जरूरत है - हमारे पूरे (बहुत बड़े) आवेदन के दौरान संवाद के कुछ उदाहरण पहले से ही हैं, इस तथ्य पर बैंक कि संवाद के बाद डायमंड में अब संवाद नहीं है।
संपादित करें: मोडल ध्वज के मान को बदलने से कोई प्रभाव नहीं पड़ता है। साथ ही, मुझे एहसास हुआ कि मेरा उदाहरण डोम से तत्व को नहीं हटाता है। चाहे मैं ऐसा करता हूं या नहीं, स्मृति रिसाव बनी हुई है। मेरे वास्तविक प्रोजेक्ट में कोड $ (यह) .remove() का उपयोग कर डोम से तत्व को हटा रहा है। मैंने उदाहरण को सरल बना दिया, क्योंकि असली मुद्दा "नष्ट" कॉल है जो कुछ प्रकार के परिपत्र संदर्भ या कुछ ऐसा है जो मैंने 6 एमबी मेमोरी स्पाइक का उल्लेख किया है।
संपादित करें: इस और अधिक देखने के बाद, यह कोई फर्क नहीं पड़ता कि JQuery UI विजेट का उपयोग कर रहा हूं (मैंने संवाद, अपना स्वयं का कस्टम विजेट और बटन) का प्रयास किया है। जब तक मैं तत्व को हटा देता हूं कि विजेट डीओएम से संदर्भित कर रहा है, तो मुझे आईई 7 में विशाल मेमोरी रिसाव दिखाई देता है। मेमोरी रिसाव तब भी होता है जब मैं तत्वों को डीओएम में कहीं और ले जाता हूं। मैंने एक "कचरा बिन" डीआईवी बनाने की कोशिश की, जिसे मैंने पूरी तरह से हटाने के बजाय अपने संवाद की सभी सामग्री को स्थानांतरित कर दिया, और वही स्पाइक हुआ।
किसी भी मदद या दिशा की सराहना की जाएगी। अग्रिम दोस्तों में धन्यवाद!
क्या आप मॉडल = सत्य के बिना परीक्षण कर सकते हैं (क्षमा करें आईई नहीं है) - जैसा कि इस SO प्रश्न में है -> http://stackoverflow.com/questions/2095095/jquery-ui-dialog-memory-leaks – ManseUK
मोडल सेट करना संवाद प्रदर्शित करते समय झूठी प्रारंभिक मेमोरी स्पाइक को हटा देता है। हालांकि, वेब पेज को रीफ्रेश करते समय ~ 6 एमबी की वृद्धि अभी भी है। – Adam
क्या आपने jQuery ट्रैकर पर एक बग दायर किया है? – Randomblue