問題タブ [htmlcollection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1754 参照

javascript - HTML コレクションの長さがゼロです。配列に変換できません。ハンドルバー.js

HTML ファイルのコンテンツをハンドルバー テンプレートに置き換えました。今、私はこのjsコードを持っています

handelbars テンプレートを使用する前は正常に機能していましたが、ノードリストを返すため、要素を反復処理して各要素にクリックを追加することができました。

ハンドルバーを使用した後、私elementsは HTMLcollection を配列に変換しようとしましたが、空の配列を取得しています。

以下の質問があります。ハンドルバーがこの変化の原因ですか? (ノード リストではなく HTMLcollection を返します) それとも、2 つの別々のものを接続しているだけですか?

空の配列を取得するのはなぜですか?

0 投票する
1 に答える
644 参照

javascript - Chrome での HTMLCollection のメモリ リーク

編集:関連する問題とバグに関する情報については、https ://bugs.chromium.org/p/chromium/issues/detail?id=707544 を参照してください。

今後この質問に答える必要はありませんが、参考のために質問を残しておいてください。


Element.getElementsByTagName は Chrome で HTMLCollection を返します。

呼び出し元または参照元の要素を GC が収集するのを防ぎます。

Detached DOM ツリーには何も見つかりませんでしたが、ノード数 (およびおそらくヒープ サイズ) が予期せず増加しました。

以下は、コードが提供されているページのボタンをクリックして、代わりに GC を強制 した結果を示しています。(メジャー GC/DOM GC の後にヒープ サイズは削除されますが、ノード カウントは削除されません)

開発ツールのパフォーマンス

最初の割り当てと強制 GC 後のメモリ情報。

Devtool メモリ

私の意見では、これらの HTMLCollection はキャッシュ/プレースホルダーとして機能する可能性があります。その一時的な要素であるため、それらの要素が削除されて収集された場合でも、不要な量の HTMLCollection のコピーが残ります。

Win10 の Chrome 57.0.2987.133 および Chromium 59.0.3058.0 で確認されました。

再現可能なコード: