私は、主にキャンバス上で動作するJavascriptでプロジェクトを作成していますが、DOMに多くのメニューを動的に作成することも含まれています。私はJQueryを使用していません。代わりに、document.createElementを使用して要素を作成し、それをappendChildを持つ親に追加するカスタム関数を使用しています。要素を削除するには、element.parentNode.removeChild(element)を使用します。作成される要素はどのような型でも構いません。入力、画像などを含む。HTML要素を追加して削除した後に恒久的に減速する:その原因とその修正方法は何ですか?
問題は、多くの要素を作成して削除した後、ページが大幅に減速し始め、この数が増えると着実に悪化します。一度に要素が存在する。しかし、Javascriptは遅くならない。メインの更新ループは問題ありませんが、マウスイベントとDOMの操作に関連するすべてが、ページが再ロードされるまで遅くなります。
これまでも同様の問題が発生しましたが、多くの要素を作成したり削除したりしなかったため、一般的に無視されています。
私が原因として考えているのは、参照がクリアされてDOMの可視部分から削除されても、document.createElementによって作成された要素がメモリ内に存在し続けるということだけです。あるいは、おそらく親要素を削除しても、子要素がなくなっているように見えても、すべての子要素を適切に削除することはできません。
私の質問は次のとおりです。DOMが表示されず、JS変数が指し示されていない場合でも、作成された要素がDOMによって保持されていますか?これが減速の原因になりますか?もしそうなら、どうやってDOM要素を適切に破壊するのですか?
DOMから要素を削除する前に削除してください。 考えられるもう1つの原因は、作成された要素への参照をメモリに保持することです。同様に、要素を作成して変数に代入し、その変数に到達可能な状態が続く場合、その要素はガベージコレクションできません。 –
@GiacomoCosimato:これは問題でした!多くのメニューでは、多くのイベントリスナーでカスタムキャンバス要素が使用されていましたが、適切にクリアしていませんでした。それが動作することを修正した後!ありがとうございました! – IndigoFenix
私は助けてうれしかった:) –