3

Google Chrome を使用して、次のように ajax を使用してファイルを blob としてダウンロードするとします。

var xhr = new XMLHttpRequest();
xhr.open('GET', 'some/path', true);
xhr.responseType = 'blob';

xhr.onload = function(e) {      
    //Save xhr.response using FileSystem API
};

xhr.send();

ここでメモリの使用について心配する必要がありますか (ダウンロードしたファイルが非常に大きいか、この方法で大量のファイルをダウンロードする可能性があると仮定します)?

私の理解では、「arraybuffer」ではなく「blob」の responseType を指定しているため、ダウンロードされたデータは Javascript で使用可能なメモリにロードされません。ただし、ダウンロードしたデータはどこかに保存する必要があります。メモリに保存されているだけですか、それともブラウザは必要に応じてメモリ不足のキャッシュに入れますか? メモリに保持されている場合、処理が完了したら破棄する方法はありますか (つまり、私の例では、FileSystem API を使用して保存した後)。

4

4 に答える 4

0

データがどこに保存されるかについての具体的な質問には答えられませんが、ディスク上のメモリに保存されると思います。

私が答えることができる部分は、ブロブ オブジェクト自体 (必ずしもデータではなく、ブロブ オブジェクトだけ) によって使用されるメモリを解放する方法です。現在のスコープでオブジェクトを使用していないか、スコープが終了している限り、オブジェクトは自動的にクリーンアップされます。たとえば、クロージャまたは無名関数内では、関数が終了すると、そのスコープで作成されたものはすべてガベージ コレクションされます。null に手動で割り当てるか、delete を呼び出すこともできます。

MDNの削除演算子について読む必要があります。上記のプロセスをより詳細に説明する MDNのメモリ管理ページもあります。

于 2013-07-29T21:09:31.057 に答える