2011-10-22 12 views
4

私は、多数の(数百の)DOMオブジェクトを作成し、基礎となるデータの変更に合わせて動的に更新または削除する必要のあるWebインターフェイスを開発中です。私はすべてのオブジェクトについていくための最も効果的な戦略に着手しようとしているので、アプリケーションはできるだけ優雅にスケールされています。javascript配列のDOMオブジェクトやjQueryオブジェクトへの参照を維持するのは悪い考えですか?

私の最初の考えは、DOM要素を匿名で参照する配列とハッシュテーブルを作成し、それらを素早く見つけて必要な変更をディスパッチすることです。このアプローチが問題になる理由はありますか?代わりにDOMツリーでそれらを探す方が良いでしょうか?

jQueryオブジェクトはどうですか?それらを頻繁にオンザフライで作成し、ガベージコレクトしたり、構造化されたキャッシュに大量(数百)のデータを保存することをお勧めしますか?

+1

これを行うと、DOMから物事を削除した場合でも、DOM内に存在しないものへの参照に終わる可能性があります。そして、コードが奇妙な動作をしている理由を把握しようとすると、楽しい時を過ごすことができます。 –

答えて

2

複数のjQueryオブジェクトを複数作成するのではなく、1つのjQueryオブジェクトを保持する方がよいでしょう。しかし、JavascriptのボトルネックはDOMの操作であり、要素の参照は保存されないことに注意してください。

私は10000 divでいくつかのテストを行い、配列/ jqueryオブジェクトのすべてをDOMで毎回調べるよりもはるかに高速です。

利用IDSと最大効率のインデックス(多くの人々がネイティブクラスセレクタを持っていない古いブラウザを使用)、すなわち:

var allElements = $("#container").children() 
allElements.eq(10).hide() 
+0

これは、より良いスケールになります: 'var container = $("#container "); HandleSomeEvent(){var container = $( "#container");関数HandleSomeEvent(){container.children()。eq(10).hide();} container.children()。eq(10).hide();} '? –

+0

最初のもの; jQueryオブジェクトは、関数が呼び出されるたびに作成される必要がないためです。 –

1
時間は内容の操作によって支配されようとしている

(特に、elementIDを使用するセレクタを使用してクエリを実行する場合、getElementByIdは非常に高速です)。 これはパフォーマンスよりもむしろコード構造の問題だと思います。このハッシュテーブルをDOMと同期させるためには、余分なコードがたくさんあるかもしれません。それは私が見ている主な問題です。 (実際には、DOMのどの要素がどのデータにバインドされているかを宣言的に表現する方法が必要ですが、これを行うフレームワークがあり、更新を行い、すべてを保持します

関連する問題