JSONP geliştirmesinde yeniyim ve IE 7/8'in JSONP komut dosyasının belleğini temizlemeyeceğini öğrendim. Bu, sayfamda birkaç saat çalıştıktan sonra çok yüksek bellek tüketimine yol açıyor.Internet'te JSONP belleği nasıl temizlenir Exploreor
İnternete baktım ve düzeltmelerin çoğunun, Neil Fraser numaralı ipucuna dayanarak bulunduğunu gördüm. blogdan size Maalesef silme IE "Nesne bu eylemi desteklemiyor" hatasını yaratacak
var tmp;
while (tmp = document.getElementById('JSONP')) {
tmp.parentNode.removeChild(tmp);
// this deletion will create error in IE.
for (var prop in tmp) delete tmp[prop];
tmp = null;
}
gibi kodunu kullanarak komut tüm özelliklerini silmek gerektiğini söyledi ve serbest olmayacak hafıza.
Sorularım, JSONP betiğimin belleğini gerçekten nasıl kaldıracak? İki dosya yapıştırarak tarafından bellek sızıntısı yeniden oluşturabilirsiniz
Testing.html
<html><head></head><body><script>
var script,
head = document.getElementsByTagName('head')[0],
loadCount= 0,
uuid= 1,
URL= "memleaktest.js?uuid=",
clearConsole = function() {
var con= document.getElementById("console");
while (con.childNodes.length)
con.removeChild(con.childNodes[0]);
},
log = function(msg) {
var div= document.createElement("DIV"),
text= document.createTextNode(msg),
con= document.getElementById("console");
div.appendChild(text);
con.appendChild(div);
},
test = { "msg" : null, "data" : null };
var loaded= function() {
if (!test.msg)
return setTimeout(loaded,10);
log("loaded #" + loadCount + ": " + test.msg);
var tmp;
while (tmp = document.getElementById('JSONP')) {
tmp.parentNode.removeChild(tmp);
// not working in IE 7/8
// for (var prop in tmp) delete tmp[prop];
tmp = null;
}
test.msg = test.data = null;
if (--loadCount)
setTimeout(load, 100);
};
var load = function(){
var url= URL + (uuid ++);
log("load via JSONP: "+url);
script= document.createElement('script');
script.id = 'JSONP';
script.type = 'text/javascript';
script.charset = 'utf-8';
script.src = url;
head.appendChild(script);
setTimeout(loaded,1000);
};
</script>
<div>
<button onclick="loadCount=3; load();" name="asd" value="asdas">jsonp load</button>
<button onclick="clearConsole();" name="asd" value="asdas">clear Console</button>
</div>
<div id="console"></div>
</body></html>
memoryleaktest.js
test.msg = "loaded #"+loadCount;
test.data = "test data with 1MB size";
:
Ben aşağıda benim test kodu koymak Testing.html'yi açın.
Sızıntıları izlemek için Damlayı kullandım ve Damlama'da belleğin sürekli olarak arttığını ve "<" komut dosyasının ">" silinmediğini görebilirsiniz.
Yardımlarınız için çok teşekkür ederim!
Büyük ilk soru. SO'ya hoşgeldiniz. –