2

重複の可能性:
Jquery のパフォーマンス: hide() vs is(':visible') - どちらが速いですか?

jQuery.hide() 関数を呼び出す前に、要素が既に非表示になっているかどうかを (独自の条件で) チェックすることは理にかなっていますか? (および jQuery.show() との類推)

関数のソース コードを読むと、要素のプロパティに関係なくオーバーランするように思えます。関数セットの属性をチェックしたり、終了させたりするのに時間がかかりますか?

4

2 に答える 2

3

これらの種類の質問は、常に実際のパフォーマンステストで最もよく答えられ、jsperfシステムを使用するとテストが非常に簡単になります。

驚いたことに、希望のスタイルがすでに設定されている場合は、設定する前に最初に確認するパフォーマンスサイクル(ChromeとFirefoxの場合)を節約できるようです。

ここでさまざまな組み合わせを確認できます:http://jsperf.com/hide-vs-check

これら2つのオプションの最も簡単な比較として:

elem.style.display = "none";
elem.style.display = "none";

elem.style.display = "none";
if (elem.style.display !== "none") {
    elem.style.display = "none";
}

2番目のオプションは少し高速です。これは、スタイルを設定することは、それがすでにその値に設定されている場合でも、依然としてかなりのコストがかかり、不要なときに設定することを避けるために時間を節約することを示唆しています。


または、2つのオプションのjQueryバージョン:

elem.style.display = "none";
elem$.hide()

elem.style.display = "none";
if (elem$.css("display") !== "none") {
    elem$.hide();
}

それでも、目的の状態がすでに設定されている場合は、2番目のオプションの方が高速であることを示しています。


ただし、状態を変更する必要がある場合は、追加のテストによって(明らかに)速度が低下します。ここでの最初のオプションは、条件がtrueと評価された場合に条件に余分な時間がかかるため、2番目のオプションよりも高速です。

elem.style.display = "block";
elem$.hide()

elem.style.display = "block";
if (elem$.css("display") !== "none") {
    elem$.hide();
}
于 2012-10-09T01:58:13.797 に答える
1

属性のチェックに時間がかかります。最初に jQuery は要素を見つけてから、次のすべてをチェックする必要があります。

  • これらの CSS 表示値はnoneです。
  • それらは、 を持つフォーム要素type="hidden"です。
  • それらの幅と高さは明示的に 0 に設定されています。
  • 先祖要素は隠されているため、要素はページに表示されません。

それ以外の場合、属性を設定するときは、要素を見つけてプロパティを割り当てる (または上書きする) という 2 つの手順だけです。

于 2012-10-09T00:38:53.760 に答える