हमारे पास हमारे कोड में यह अनाम कार्य है, जो jQuery के अजाक्स ऑब्जेक्ट पैरामीटर का हिस्सा है और जो फ़ंक्शन से कुछ चर का उपयोग करता है उसे सेव किया जाता है।इस जावास्क्रिप्ट अज्ञात फ़ंक्शन को दोबारा कैसे करें?
this.invoke = function(method, data, callback, error, bare) {
$.ajax({
success: function(res) {
if (!callback) return;
var result = "";
if (res != null && res.length != 0)
var result = JSON2.parse(res);
if (bare)
{ callback(result); return; }
for (var property in result) {
callback(result[property]);
break;
}
}
});
}
मैंने अतिरिक्त कोड छोड़ा है, लेकिन आपको विचार मिलता है। कोड पूरी तरह से ठीक काम करता है, लेकिन यह आईई में प्रत्येक कॉल पर 4 केबीएस को रिसाव करता है, इसलिए मैं अज्ञात फ़ंक्शन को नामित एक में बदलने के लिए इसे पुन: सक्रिय करना चाहता हूं, जैसे .onSuccess = function (res) {..}।
समस्या यह है कि यह फ़ंक्शन this.invoke (..) से चर का उपयोग करता है, इसलिए मैं इसे अपने शरीर से बाहर नहीं ले सकता। मैं इस कोड को सही तरीके से कैसे प्रतिक्रिया दूं, ताकि अज्ञात फ़ंक्शंस और पैरेंट फ़ंक्शन वेरिएबल्स का उपयोग न करें?
अद्यतन। मैं एक अलग ऑब्जेक्ट बनाने के बारे में सोच रहा हूं, इसे उसी पैरामीटर के साथ शुरू कर रहा हूं, और jQuery पर अजाक्स ऑब्जेक्ट के पैरामीटर के रूप में इसके ऑनसेक्शन फ़ंक्शन को पास कर रहा हूं। हालांकि मुझे संदेह है कि यह अभी भी स्मृति को रिसाव करेगा।
अपडेट 2. मुझे कुछ लिंक मिलते हैं जो सुझाव देते हैं कि वास्तविक रिसाव jQuery के कारण हो सकता है। Simple jQuery Ajax call leaks memory in Internet Explorer Memory leak involving jQuery Ajax requests
फिर भी यह इस refactor करने के लिए एक रास्ता खोजने के लिए अच्छा था।
अपडेट 3. मैं उत्तर स्वीकार करने से पहले एक और सामान्य समाधान की प्रतीक्षा करूंगा।
आप कैसे जानते हैं कि यह वास्तव में लीक हो रहा है, बनाम तुरंत एकत्र नहीं किया जा रहा है? आईई की रिसाव डीओएम तत्वों और घटना हैंडलरों के बीच परिपत्र संदर्भों के आसपास होती है, जिनमें से कोई भी यहां स्पष्ट रूप से मौजूद नहीं है। –
आईई भी बंद होने पर रिसाव करता है, जो हमारे पास है। मैंने उपरोक्त कोड को डीबग किया है और मेरे ज्ञान से यह उन हिस्सों में से एक है जहां रिसाव होता है, क्योंकि कॉलबैक कुछ भी नहीं लेता है। (इस कोड पर सभी ब्राउज़र रिसाव निष्पक्ष होना)। –