2011-10-25 55 views
1

我有一個圖像旋轉器,爲新幻燈片創建一個div,隱藏當前幻燈片,顯示新的div,並刪除隱藏的div。 所有這一切都是與jQuery做,我使用此代碼刪除我不再需要的幻燈片:清除瀏覽器中的內存

var last = $("#item_" + lastSlide + "_" + idSuffix); 
last.empty(); 
last.remove(); 
last = null; 

的內存每張幻燈片之後還在不斷增加。 關於如何有效地清除內存的任何ideeas?

+2

這是不太可能在您發佈的代碼中發生內存泄漏;它更可能是在旋轉或其他地方。在JavaScript中你沒有控制內存的 –

+0

。最好的方法是圍繞此編寫更高效的代碼。顯示您的代碼,瞭解如何創建幻燈片,也許我們可以幫助您改進它 – Ibu

+0

垃圾收集進程無法從內存中刪除任何內容,直到刪除所有對引用的引用爲止。這已經寫了很多:http://stackoverflow.com/questions/864516/what-is-javascript-garbage-collection,http://stackoverflow.com/questions/774357/garbage-collection – Jasper

回答

0

我想出的最好的解決方案是清除html內容,然後刪除元素。

例如:

myDiv.html(""); 
myDiv.remove(); 
0

對不同的幻燈片使用不同的元素並不明智。您應該使用兩個元素進行淡入淡出幻燈片。這是我前段時間寫的代碼:

el = function(q) {return document.getElementById(q)}; 

var slides=["logo.jpg","avond.jpg","bar.jpg","buitencloseup.jpg","servet.jpg","spelcomputers.jpg","tafelaanbar.jpg","tafelsbuiten.jpg"], 
Math.floor(Math.random()*slides.length), 
highimg=el("highimg"), 
lowimg=el("lowimg"), 
fade, 
changeslide=function() { 
    lowimg.style.backgroundImage=highimg.style.backgroundImage 
    highimg.style.backgroundImage="url(img/slideshow/"+(slides[++_src]||slides[_src=0])+")" 
    var time=highimg.style.opacity=0; 
    highimg.style.filter="alpha(opacity=0)" 

    if (fade) 
    clearInterval(fade) 

    fade=setInterval(function(){ 
     if(highimg.style.opacity<1) 
     highimg.style.filter="alpha(opacity="+(highimg.style.opacity=time+=1/40)*100+")" 
     else 
     { 
      highimg.style.filter="alpha(opacity=100)"; 
      highimg.style.opacity=1 
      clearInterval(fade); 
     } 
    },25) 
} 
interval=setInterval(changeslide,10000) 
highimg.onclick = changeslide 
changeslide() 
+0

我知道你花了一段時間來寫這個,但它很混亂,請添加更多評論讓它更容易理解 – Ibu

+0

我不會只更改圖像。我也顯示HTML內容。所以我認爲這沒有幫助,因爲這兩個容器將會填充必須刪除的html內容。 – gabitzish

+0

每張幻燈片都有相同的結構嗎?例如:標題,副標題,信息,圖像。然後你可以重複使用不同文本和屬性的每個元素。 – bopjesvla