我有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