タイトルの通りです
appendで追加した要素はremoveで消せるのはわかります
innerHTML=""とした場合に、メモリから消えてるんでしょうか
下記2つの差異を教えて下さい
div = document.createElement("div"); document.body.append(div); document.body.remove(div);
div = document.createElement("div"); document.body.append(div); document.body.innerHTML="";
仰っている「メモリ」をどういう想定で用語使われてますか?
innerHTML を設定すると、その内容で上書きされますので、過去に追加したものは画面 (の内容を表示するための DOM ツリー) からは消えます。メモリから消えるかどうかは、変数 div をその後どうするかによります。
画面から消えるのはわかります
消えただけでメモリを食ってますよね
forで1000回appendした場合に
innerHTMLでメモリ上から解放されるわけではないんですか?
そのあとの処理というのはどういった処理ですか?
removeが必要なんでしょうか?
本題の通り差異があるか ないのかすらわからずにいます
appendでメモリを食うのか?ということすらもわかりませんが、(恐らく関係してそうですが1000回appendしたら重くなる&下手したらフリーズ=これがメモリを食ってるとの結論)
確認する方法等ありましたらお教え願いたいです
「変数 div をその後どうするか」というのは、例えば別のところに append すればそっちで使われるし、div がグローバル変数ならずっと参照されたまま残るということです。div がローカル変数なら、関数を抜ければ div を参照するものがなくなりますので、いずれ GC (ガベージコレクション) にひっかかってメモリから消されることになります。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Memory_Management
https://ja.javascript.info/garbage-collection
https://www.html5rocks.com/ja/tutorials/speed/static-mem-pools/
https://qiita.com/tkdn/items/ea4f034e0d661def244a
> removeが必要なんでしょうか?
逆に聞きますが、「remove() したらメモリから開放される」と思った根拠はどこにありますか。
「remove()してもメモリから開放されないコード」は作ろうと思えば作れます。
回答3件
あなたの回答
tips
プレビュー