[英]FileReader memory leak in Chrome
我有一個帶文件上傳功能的網頁。 上傳以5MB塊的形式執行。 我想在將每個塊發送到服務器之前計算它的哈希值。 塊由Blob對象表示。 為了計算哈希,我正在使用本機FileReader將這樣的blob讀入ArrayBuffer 。 這是代碼:
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文件:
Chrome 55.0.2883.87 m(64位):內存快速上升至1-2GB並在此周圍振盪。 有時它會一直向上,瀏覽器選項卡崩潰。 它可以使用比讀取塊大小更多的內存。 例如,在讀取500MB的塊后,該過程已經使用了700MB的內存。
Firefox 50.1.0:內存使用量大約為300-600MB
我嘗試過的代碼調整 - 一切都無濟於事:
FileReader
實例(如本問題所示 ) FileReader
FileReader
和ArrayBuffer
設置為null 問題是:有沒有辦法解決問題? 這是FileReader實現中的錯誤還是我做錯了什么?
編輯 :這是一個JSFiddle https://jsfiddle.net/andy250/pjt9udeu/
這是Windows上的Chrome中的一個錯誤。 據報道: https : //bugs.chromium.org/p/chromium/issues/detail?id = 674903
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.