我有一个具有文件上传功能的网页。上传以 5MB 的块执行。我想在将每个块发送到服务器之前计算它的哈希值。块由 Blob 对象表示。为了计算散列,我正在使用 native ArrayBuffer 将此类 blob 读入 FileReader 。这是代码:
var reader = new FileReader();
var getHash = function (blob, callback) {
reader.onloadend = function (e) {
var hash = util.hash(e.target.result);
callback(hash);
};
reader.readAsArrayBuffer(blob);
}
var processChunk = function (chunk) {
if (chunk) {
getHash(chunk, function (hash) {
util.sendToServer(chunk, hash, function() {
// this callback is called when chunk upload is finished
processChunk(chunks.shift());
});
});
}
}
var chunks = file.splitIntoChunks(); // gets an array of blobs
processChunk(chunks.shift());
问题:使用
FileReader.readAsArrayBuffer
似乎占用了大量未释放的内存。到目前为止,我在以下浏览器上测试了 5GB 文件:我尝试过的代码调整 - 都无济于事:
FileReader
实例(如 this question 中所建议的) FileReader
FileReader
和 ArrayBuffer
设置为 null问题:有没有办法解决这个问题?这是 FileReader 实现中的错误还是我做错了什么?
编辑 :这是一个 JSFiddle https://jsfiddle.net/andy250/pjt9udeu/
最佳答案
这是 Windows 上 Chrome 中的一个错误。这里报道:https://bugs.chromium.org/p/chromium/issues/detail?id=674903
关于javascript - Chrome 中的 FileReader 内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41181923/