【发布时间】:2015-08-19 17:52:42
【问题描述】:
我正在使用 FileReader 将图像文件上传到客户端 用于数据获取和缩略图显示。
我注意到的是, 在页面进程中,在任务管理器中, 内存只会越来越高。 当进程停止时,内存保持高位并且永不下降。
你能告诉我我在这里做错了什么吗?
要查看,请上传200多张图片,最多30MG。 并看到内存一直在泄漏
先谢谢你了。
-- here is a link to a code example on the web
这是我的代码:
<input class="fu" type="file" multiple="multiple" />
<div class="fin"></div>
<div class="list"></div>
<script type="text/javascript">
$(document).ready(function () {
var input = $("body input.fu");
input[0].addEventListener('change', fu.select, false);
});
var fu = {
list: [],
index: 0,
select: function (evt) {
evt.stopPropagation();
evt.preventDefault();
var files = evt.target.files ? evt.target.files : evt.dataTransfer ? evt.dataTransfer.files : []; // FileList object
fu.list = files;
fu.index = 0;
fu.load();
},
load: function () {
var index = fu.index;
var file = fu.list[index];
if (file) {
var reader = new FileReader(); // File API object
reader.onloadend = (function (theFile) {
return function (evt) {
if (evt.target.readyState == FileReader.DONE) {
setTimeout(fu.load, 20);
}
};
})(file);
reader.onprogress = null;
reader.onloadstart = null;
reader.onerror = null;
reader.onabort = null;
if (reader.readAsBinaryString) {
reader.readAsBinaryString(file);
} else {
reader.readAsDataURL(file);
}
fu.index++;
$('.fin').html("#" + fu.index);
} else {
$('.fin').html("finish");
}
}
}
</script>
【问题讨论】:
-
"要检查,请上传超过 200 张图片" 创建 200 个
FileReader实例? “最多30MG。”什么是“MG”? -
它是创建 200 个实例吗? MG是兆字节,想法是上传许多图像到客户端并查看对内存的影响。如果您上传 10 张图片,您不会看到不同的
-
尝试打开任务管理器,选择当前选项卡,在jsfiddle.net/uynvenL9查看内存
-
我有一种强烈的感觉,那就是你的
reader.onloadend函数......我真的不明白你想在那里做什么? -
onloadend - 我得到了我需要获取数据并显示缩略图的文件流。在这里我已经表明,即使我什么都不做,只加载一个文件然后下一个文件,它仍然会弄乱内存@MinusFour
标签: javascript html memory-leaks filereader