2011-12-29 10 views
0

私は約6000人の子供がいるコンテナを持っています。これに対してJquery.emptyを実行すると、より速いブラウザの1つで約2秒かかります。IE7/8では、スクリプトが応答しないことをユーザに通知し、そのオプションを停止するオプションがあります。この辺りの読み込み「応答しないスクリプト」ポップアップを引き起こす多くの子を持つコンテナでJqueryが空になる

は、私はいくつかの要素にjQueryのバインドされたオブジェクトを持っていると私はメモリリークを避けたいので、私はJquery.emptyを実行する必要があることを学びました。 「UIスレッド」を緩和するためのsetTimeoutに空を置く

が表示され、ポップアップを防ぐようには見えません。

私は私がこれをスピードアップするか、少なくともポップアップを抑制することができるいずれかのヒントを必要としています。いくつかの要素を削除しようとする必要がありますか、jquery.empty関数に何が影響しますか?私は2つに分けることができますか?

コード:

<div class="table"> 
    <a id="header1">header1</a> 
    <div id="content1"> 
     <a class="contenttext1">contenttext1</a> 
    </div> 
    <div id="content2"> 
     <a class="contenttext2">contenttext2</a> 
    </div> 
    ....content3 
    ....content4 
    .... 
</div> 

私はdiv.tableを空にしています:

DOM構造は以下の通りです。$を実行

$(".table").empty(); 

( "表")を見つけます( "*")。長さは.emptyコードを実行するために約2秒かかり6000

を与えます。コードを見ることなく、私は具体的なアドバイスを提供することはできません

+0

コードを投稿できますか?非効率なセレクタを使用すると、改善することができますが、スクリプトを見ずに判断することは不可能です。 – SpaceBison

+0

コードと構造体が追加されました – Yonder

+0

'$("。table ").html( '');'または '$("。table ")[0] .innerHTML = '';'? [jQueryのソースコード](https://github.com/jquery/jquery/blob/master/src/manipulation.js#L185)にあるように、 'empty'はすべての子孫を取得し、それらのために格納されたデータをパージします。これは良いことですが、問題の原因になっている可能性があります。 –

答えて

0

が、私が最初にしているだろう二つのこと。 DOMからHTMLを空にしている繰り返しのコードは、できるだけ効率的になるように

1)あなたのセレクタを最適化します。 IE8 & IE7は他のブラウザよりも速度が遅いことで有名ですが、スクリプトを最適化することでこれを打ち消すことができます。

2.)IE8開発ツール(IE8 および IE8 Compat/IE7用)でプロファイラを実行し、結果にボトルネックがどこにあるかを分析します。

+0

1)上記のDOM構造の形式でhtmlを文字列として返すコードがあります。次に、$( "。table")。empty()と$( "。table")。append()を生成した文字列で実行します。私はタイマーを置くことによって、ほとんどの時間を費やしている$( "。table")。empty()命令です。 2)私はIE8の開発ツールを稼働させようとしてきましたが、私のページにブラウザを出してすぐにブラウザがクラッシュするようです。 (警告サイン?)クロムとファイアフォックスのプロファイリングでは、ボトルネックをもっと深く理解することはできませんでした。 – Yonder

+0

上記のFelix Klingによって提案されたremove()やオプションなど、要素を削除するための他のAPIオプションを試しましたか? – SpaceBison

関連する問題