我有Chrome的Chrome的內存/垃圾收集問題
我工作的一個照片上傳網站,讓我的客戶拖放照片使用HTML5和文件API上傳,所以這個內存/垃圾收集問題不會在IE中工作。它只適用於Chrome和FF。我還沒有在Safari,Opera中測試過。
我沒有使用任何JS框架,我的示例少於80行代碼,所以它很容易遵循。
這是我的例子:http://seesquaredphoto.com/testPreview.html
如果拖放的JPG照片屈指可數(4-5MB每個)入禁區,你會看到預覽負載,並在Windows任務管理器,你可以看到內存該窗口的使用率攀升。如果您單擊「清除圖像」按鈕,圖像將被刪除。
如果在FF中執行此操作,幾秒鐘後,內存將返回到您預覽圖像之前的狀態。但是在Chrome中,內存不會下降。
任何想法?我做錯了什麼或者這是一個鉻錯誤?
謝謝。 下面是代碼,如果你不想要查看源代碼上面的鏈接:
的Javascript:
var upload = {
uploadFiles : function(event) {
var files = event.dataTransfer.files;
event.stopPropagation();
event.preventDefault();
var imageType = /image.*/;
for (var x = 0; x < files.length; x++) {
var file = files.item(x);
if (!file.type.match(imageType) || file.fileName.toUpperCase().indexOf(".JPG")!=file.fileName.length-4) {
continue;
}
var s = document.createElement("span");
s.className = "imgS";
var img = document.createElement("img");
img.className = "preview";
img.src = "";
s.appendChild(img);
document.getElementById("DDCont").appendChild(s);
loadPreview(img,file);
}
}
};
function loadPreview(img,file){
var reader = new FileReader();
reader.onload = function(e) {
img.src = e.target.result;
}
reader.readAsDataURL(file)
}
function init(){
var container = document.getElementById('DDCont');
container.addEventListener("dragenter", function(event) {
event.stopPropagation();
event.preventDefault();
},
false
);
container.addEventListener("dragover", function(event) {
event.stopPropagation();
event.preventDefault();
},
false
);
container.addEventListener("dragleave", function(event) {
event.stopPropagation();
event.preventDefault();
},
false
);
container.addEventListener("drop", upload.uploadFiles, false);
}
function clearImages(){
cont = document.getElementById("DDCont");
while(cont.childNodes.length>0) {
cont.removeChild(cont.childNodes[0]);
}
}
HTML:
<div id="DDCont" style="width:800px; height:600px; border:3px solid #333333; overflow:auto;"></div>
<input type="button" value="Clear Images" onclick="clearImages()"/>
在這裏發佈您的代碼。 SO的用戶中有10%在iOS上,無法看到它。 – 2011-02-04 22:29:38
從Radek的評論開始,StackOverflow應該是獨立的。外部鏈接可以被刪除或移動。一般來說,人們不應該去其他地方閱讀你的問題。 – 2011-02-04 22:31:33
你在哪裏刪除事件監聽器?僅僅因爲你從DOM中刪除一個元素並不意味着所有的事件都被拋出。 – rxgx 2011-02-11 21:54:07