回答編集履歴
1
オブジェクトURLの開放についての解説図を追加
test
CHANGED
@@ -41,3 +41,25 @@
|
|
41
41
|
|
42
42
|
|
43
43
|
参考:[https://developer.mozilla.org/ja/docs/Web/API/URL/createObjectURL](https://developer.mozilla.org/ja/docs/Web/API/URL/createObjectURL)
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
---
|
48
|
+
|
49
|
+
追記:解説図を添付します
|
50
|
+
|
51
|
+
※canvasのtoBlobをinput[type=file]からFileを入手したと読み替えて下さい
|
52
|
+
|
53
|
+
※BlobとFileは同じものと考えて下さい(FileオブジェクトはBlobオブジェクトを継承しています)
|
54
|
+
|
55
|
+
※この図ではa要素のhref属性にオブジェクトURLを設定しファイルをダウンロードしようとしています
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
![BlobURIスキーム文字列の取得と開放](806c617a9fa2d2f2f96651879cedb23c.png)
|
60
|
+
|
61
|
+
このようにWEBページはBlobURIスキーム形式のオブジェクトURLのエントリリストを内包していて, このリストがBlob(File)オブジェクトを開放しない限りメモリに残ってしまうのです.
|
62
|
+
|
63
|
+
従って, 何も対処していないとWEBページの生存期間に比例してエントリリストが肥大していき, (滅多にありませんが)タブやブラウザのクラッシュに繋がります.
|
64
|
+
|
65
|
+
WEBページを頻繁にリロードしている場合はこの現象は発生せず見落としがちであることから, 「URL.createObjectURLとURL.revokeObjectURLとはセットで使う」ように心がけます.
|