PHPStormのバージョンを最近アップグレードしましたIDEそして、jQueryの非効率的な使用について警告します。
例えば:
var property_single_location = $("#property [data-role='content'] .container");
次の警告が表示されます。
JQueryセレクターが効率的な方法で使用されていることを確認します。 IDセレクターの前にある子孫セレクターを分割することを提案し、キャッシュされる可能性のある重複したセレクターについて警告します。
だから私の質問は:
なぜこれが非効率的で、上記のセレクターを実行する効率的な方法は何ですか?
私は推測します:
var property_single_location = $("#property").find("[data-role='content']").find(".container");
これは正しい方法ですか?
今日同じ質問がありました Scott Kosmanhere のおかげで解決策を見つけることができました。
基本的に答えは、IDを個別に選択し、以下のすべてに.find(...)
を使用することです。あなたの例を挙げましょう:
$("#property [data-role='content'] .container");
これに変更すると、PhpStormが幸せになり、明らかに 2倍以上の速さ になる可能性があります:
$("#property").find("[data-role='content'] .container");
最近のバージョンのjQueryとブラウザーを使用するときの2つの方法の違いは無視できると思います。 idでの選択ではなく、結合されたセレクターの実行が実際に10%高速になり、非常に単純なケースを見つけることを示すテストを作成しました。
http://jsperf.com/jquery-find-vs-insel
任意の深さでクラスごとに複数の子を選択すると、「検索」が高速になります。
http://jsperf.com/jquery-find-vs-insel/7
これについてはjQueryフォーラムでいくつかの議論がありましたが、3年目です: https://forum.jquery.com/topic/which-jquery-selection-is-efficient ここで指摘しているように、同じIDセレクターで多くの操作を実行している場合、最上位の要素をキャッシュすることで最大のパフォーマンス向上が見られます。一方、いくつかの選択を行っている場合、パフォーマンスの違いはほとんどありません。
そのため、IntelliJはこのコードスタイルの重要性を誇張していると思います。
最初の質問は、Alt + Enterを押して、リストの最初のヒントを選択し、Enterを押すことです。最も効率的な方法と思われるものが表示されます。