回答編集履歴
1
オブジェクトURLの開放についての解説図を追加
answer
CHANGED
@@ -19,4 +19,15 @@
|
|
19
19
|
```
|
20
20
|
なお, 今回のサンプルのように何度もFileオブジェクトを読み込む場合, 不必要となったURL文字列をURL.revokeObjectURLメソッドを使って**明示的に破棄する必要があります**. さもないとURIスキーム形式に変換したFileオブジェクトがメモリから開放されず, メモリリークの原因となるからです.
|
21
21
|
|
22
|
-
参考:[https://developer.mozilla.org/ja/docs/Web/API/URL/createObjectURL](https://developer.mozilla.org/ja/docs/Web/API/URL/createObjectURL)
|
22
|
+
参考:[https://developer.mozilla.org/ja/docs/Web/API/URL/createObjectURL](https://developer.mozilla.org/ja/docs/Web/API/URL/createObjectURL)
|
23
|
+
|
24
|
+
---
|
25
|
+
追記:解説図を添付します
|
26
|
+
※canvasのtoBlobをinput[type=file]からFileを入手したと読み替えて下さい
|
27
|
+
※BlobとFileは同じものと考えて下さい(FileオブジェクトはBlobオブジェクトを継承しています)
|
28
|
+
※この図ではa要素のhref属性にオブジェクトURLを設定しファイルをダウンロードしようとしています
|
29
|
+
|
30
|
+

|
31
|
+
このようにWEBページはBlobURIスキーム形式のオブジェクトURLのエントリリストを内包していて, このリストがBlob(File)オブジェクトを開放しない限りメモリに残ってしまうのです.
|
32
|
+
従って, 何も対処していないとWEBページの生存期間に比例してエントリリストが肥大していき, (滅多にありませんが)タブやブラウザのクラッシュに繋がります.
|
33
|
+
WEBページを頻繁にリロードしている場合はこの現象は発生せず見落としがちであることから, 「URL.createObjectURLとURL.revokeObjectURLとはセットで使う」ように心がけます.
|