聞きたいこと
下記のような、ajax通信によりjsonデータを受け取り,
base64をデータURLに変換し,データURLを破棄するというプログラムを作成しました.
この通信の際,
データURLはrevokeObjectURL
によりメモリから破棄されるとは書いてあったのですが,
通信時に受け取るbase64データも破棄されているのでしょうか?
もし、メモリなどどこかに残る場合、それを破棄することは可能なのでしょうか
プログラム
javascript
1$.ajax{ 2 'url': './api/', 3 'type': 'post', 4 'data': { 5 'image': $('#image').attr('src') 6 }, 7 // beforeSend , error は省略 8 success: function(data){ 9 res = JSON.parse(data); 10 const imageUrl = window.URL.createObjectURL(toBlob(res.base64image)); 11 $('#foo').attr('src') = imageUrl; 12 window.URL.revokeObjectURL(imageUrl); 13 } 14}
toBlob
1function toBlob(base64) { 2 var bin = atob(base64.replace(/^.*,/, '')); 3 var buffer = new Uint8Array(bin.length); 4 for (var i = 0; i < bin.length; i++) { 5 buffer[i] = bin.charCodeAt(i); 6 } 7 try{ 8 var blob = new Blob([buffer.buffer], { 9 type: base64.split(";")[0].split(":")[1] 10 }); 11 }catch (e){ 12 return false; 13 } 14 return blob; 15}
追記
参考資料について
データURLは
revokeObjectURL
によりメモリから破棄されるとは書いてあったのですが,
qiita 【Blob・File・Base64・データURL・FileReader】 それぞれの特徴とブラウザへの表示についての資料
window.URL.revokeObjectURL()
によってURLを破棄しないと、ブラウザを閉じるまでメモリ上にURLが残ってしまう
これに伴い、
mozilla URL.createObjectURL()の資料
ブラウザーは、文書がアンロードされた際にこれらのオブジェクト URL をメモリから解放します。 しかし、性能とメモリ使用を考慮すると、明示的にアンロードできる安全な機会があるならば、そうするべきです。
との表現からrebokeにより破棄が可能と考えております
回答1件
あなたの回答
tips
プレビュー