$.cache
चेहरे के मूल्य पर आकार मेमोरी लीक के बारे में कुछ भी नहीं बताता है। यह बहुत छोटा हो सकता है और अभी भी एक स्मृति रिसाव हो सकता है, या यह बहुत बड़ा हो सकता है और कोई स्मृति रिसाव नहीं है।
यदि आपको पता है कि आपके पास एक समय में पृष्ठ पर jQuery के साथ 10 ईवेंट श्रोताओं के साथ बाध्य है, और अभी तक $.cache
में अधिक प्रविष्टियां हैं, तो आप जानते हैं कि आप लीक कर रहे हैं।
ईवेंट श्रोताओं को प्रत्येक व्यक्तिगत तत्व को जोड़ने के बजाय ईवेंट प्रतिनिधिमंडल का उपयोग करना एक विशाल मेमोरी सेवर है।
कहते हैं:
<ul>
<li></li>
<li></li>
<li></li>
</ul>
$("li").on("click", fn)
3 अलग-अलग ईवेंट हैंडलर्स (अधिक, अगर आप अधिक है ली का निश्चित रूप से), जबकि $("ul").on("click", "li", fn)
आप कितने ली-तत्व की परवाह किए बिना सिर्फ एक देते हैं और अभी तक होता है देते हैं एक ही परिणाम। रिसाव की
उदाहरण:
$("button").click(function() {
$("#target")[0].innerHTML = "";
$("<div>").appendTo($("#target")).click($.noop);
$("#log").text(Object.keys($.cache).length);
});
http://jsfiddle.net/SGZW4/1/
कारण किया जा रहा है कि .innerHTML जो jQuery का हिस्सा नहीं है तो यह साफ नहीं कर सकते हैं प्रयोग किया जाता है,।
फिक्स उसी के लिए jQuery विधि का उपयोग करने के लिए है:
$("button").click(function() {
$("#target").html("");
$("<div>").appendTo($("#target")).click($.noop);
$("#log").text(Object.keys($.cache).length);
});
http://jsfiddle.net/SGZW4/2/
यह के बारे में कितनी बड़ी बात है नहीं है, लेकिन कैसे यह समय के साथ बढ़ता है। यदि कैश बाध्य नहीं है (यानी हमेशा के लिए बढ़ता है) तो आपको शायद मेमोरी रिसाव मिल गया है। –
jQuery वास्तव में ब्राउज़र संगत है। यह सभी ब्राउज़रों के लिए तत्वों का सही ढंग से निपटान करने की आईई समस्या लाता है। –
यदि आप समझदार हैं तो आपको आधुनिक मेमोरी क्षमताओं को तनाव देने के लिए कड़ी मेहनत की जाएगी। बेशक आप एक बड़ी पर्याप्त स्मृति रिसाव बनाते हैं। स्मृति की कोई जादू राशि नहीं है, यह सब उपयोगकर्ता के हार्डवेयर पर निर्भर करता है। क्या आप 90 के दशक से कंप्यूटर का उपयोग करने वाले लोगों की परवाह करते हैं? –