मैं इस मुद्दे के साथ 3 दिनों के लिए संघर्ष कर रहा हूं और उम्मीद कर रहा हूं कि किसी के पास जानकारी की कुछ जानकारी है जो मैं अभी तक मदद नहीं कर पाई मुझे बाहर (मैं बेताब हूँ!)। कुछ संदर्भ प्रदान करने के लिए:jQuery (2.0.2) खाली() एचटीएमएल() मेमोरी खपत लगातार बढ़ती है
ब्राउज़र: IE9.0.8112.16421 (64 बिट); jQuery संस्करण: 2.0.2
अनिवार्य रूप से मैं जो कर रहा हूं वह एक साधारण AJAX कॉल कर रहा है और कुछ जानकारी पुनर्प्राप्त कर रहा है जिसे मैं सफलता हैंडलर के माध्यम से तत्व में डाल रहा हूं। कोड के प्रासंगिक लाइनों नीचे दिखाया गया हैं:
var onLoadViewGroupSuccess = function(data) {
var target = $("#viewGroupContent");
//for(var i=0;i<1000;i++) {
target.empty().html(data);
//}
}
लक्ष्य निम्नलिखित HTML टैग से मेल खाती है:
<tr id="viewGroupContent">...</tr>
पाश के लिए बाहर टिप्पणी की ऊपर मुद्दा (जो पता लगाने के लिए मुश्किल है आवर्धन करने का इरादा है एकल घटना के माध्यम से ट्रिगर्स क्लिक करें)। अनिवार्य रूप से जब लूप जगह में है, तो एक ही आमंत्रण की स्मृति 46 एमबी से ~ 113 एमबी तक जाती है।
बाद की कॉल लगातार स्मृति के साथ समान व्यवहार प्रदर्शित करती है। मैंने शुरू में सोचा था कि यह कुछ इवेंट हैंडलर के साथ एक मुद्दा था जिसे मैं साफ करने में असफल रहा लेकिन इस पर शासन किया क्योंकि मैंने लगभग सभी जावास्क्रिप्ट तर्कों पर टिप्पणी की थी, इसलिए उपरोक्त नीचे अनिवार्य रूप से सभी है (यानी कोई ईवेंट हैंडलर बाध्य नहीं है, कोई कस्टम ऑब्जेक्ट्स या फ़ंक्शंस नहीं है आह्वान) - यानी बंद करने का मुद्दा नहीं।
AJAX कॉल के बाहर लूप को स्थानांतरित करना (इसलिए 1000 AJAX कॉल करना) परिणामस्वरूप एक ही स्मृति प्रोफ़ाइल में परिणाम होता है (इसलिए किसी भी अस्पष्ट AJAX मेमोरी लीक को अस्वीकार कर दिया जाता है)। मैं जिस सामग्री को सम्मिलित कर रहा हूं वह एक टीडी टैग है जिसमें सामग्री की एक महत्वपूर्ण मात्रा होती है (यानी प्रत्येक HTML टैग के उदाहरण जो आप छवियों को शामिल करने के बारे में सोच सकते हैं) तो सोच रहा है कि अगर मैं जो सामग्री डाल रहा हूं वह रिसाव के लिए जिम्मेदार है।
मैंने आईई की खुद की सफाई करने की क्षमता के बारे में कुछ रोचक ब्लॉग पोस्ट पढ़े हैं जिनमें निम्नलिखित सबसे अधिक आशाजनक (http://com.hemiola.com/2009/11/23/memory-leaks-in-ie8/) शामिल हैं। दुर्भाग्य से, अब तक कोई समाधान या कामकाज नहीं है।
मुझे नुकसान हुआ है क्योंकि मैंने अपनी ऐप को नंगे हड्डियों तक तोड़ दिया है और आप $(...).empty().html(...)
के साथ जितना भी कर सकते हैं उतना नहीं कर सकते हैं। मेमोरी रिसाव धीमी लेकिन लगातार है ....
इसके अलावा, एक एफवाईआई के रूप में, मैंने आंतरिक पंक्ति के साथ गैर jQuery समाधानों की कोशिश की है, तालिका पंक्ति को हटाने और इसे पुनर्निर्माण करने के लिए डीओएम विधियों और फिर तालिका में AJAX सामग्री डालने कोशिकाओं, छोड़े गए सामग्री को एक कचरा बिन डीआईवी में ले जा रहे हैं और फिर आंतरिक HTML का आह्वान करते हैं, सभी को कोई फायदा नहीं होता है, और कई मामलों में रिसाव खराब हो जाता है ...
टेक्स्ट की इस दीवार को पढ़ने में आसान बनाने के लिए कृपया कुछ पैराग्राफ जोड़ें। –
@ फ़ेलिक्सक्लिंग आशा है कि बेहतर है ... –
'.html()' से पहले '.empty()' करने का क्या उपयोग है? '.html()' मान जोड़ने से पहले डीओएम खाली करने वाले पूरे एचटीएमएल को बदलना नहीं है? –