5

find()値が数回必要な場合に複数のサブツリートラバーサルを回避するために、常に結果を保存します。

var $a_bar = $('div.foo').find('a.bar');
$a_bar.removeClass(...);
// ... code here
$a_bar.bazz();

それ以外の

$('div.foo').find('a.bar').removeClass(...);
// ... code here
$('div.foo').find('a.bar').bazz();

それがマイクロ最適化ではないかどうか疑問に思っています...では、ノードを見つけるためのコスト/複雑さはJQuery何ですか?

4

4 に答える 4

8

js perf でテストできます: http://jsperf.com/ テストを作成して実行するだけです。

ここで小さなテストを作成しました: http://jsperf.com/jquery-find55

私のブラウザ(Firefox 18)では:

  • テスト 1 (検索結果を保存) は 7,074 操作で 1 秒あたりのスコア
  • テスト 2 (検索結果は保存しません) は 1,553 オペレーションで 1 秒あたりのスコア

したがって、はい、find「遅い」ので、変数に格納することをお勧めします。

于 2013-01-22T17:08:28.157 に答える
1

変数を複数回再利用する場合は、cache同じように変数を再利用することをお勧めします。

.find()その前に渡したjQueryオブジェクト内をトラバースするため、すでに指定されているもの内のみを検索し、非常に高速になります。

var $mainElement = $('#whatever'),
    $innerLIs  = $mainElement.find('li'),
    $innerTDs  = $mainElement.find('td');

// Now that these are cached in memory, doing anything to them is very quick

$innerLIs.hide();
// etc etc

それらを照会し続けると、毎回DOMを調べる必要があります。そして、それが完了すると、毎回jQueryオブジェクトにラップされます。

于 2013-01-22T17:09:37.100 に答える
0

同じことを何度も操作する場合は、変数を作成するのがベスト プラクティスです。

そうすれば、毎回最初に調べるのではなく、操作するだけです。

コードを少し短くするという私の声明を削除しました - jQuery セレクターと「右から左」の考え方についてのnet-tuts 記事はこちら

于 2013-01-22T17:11:51.217 に答える
0

jQuery の選択はコストがかかることが知られており、実行.findはさらにコストがかかります。オブジェクトをキャッシュすることは間違いなく良い考えであり、DRY の観点からスタイル的にも有利です。

于 2013-01-22T17:12:53.277 に答える