PHPStorm IDEでの非効率なjQuery使用警告


100

最近、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");

これは正しい方法ですか?

回答:


156

今日も同じ質問があり、スコット・コスマンの おかげで解決策を見つけることができまし

基本的に答えは、IDを個別に選択.find(...)して、以下のすべてに使用することです。だからあなたの例を取る:

$("#property [data-role='content'] .container");

これをこれに変更すると、PhpStormが幸せになり、明らかに2倍以上速くなる可能性があります。

$("#property").find("[data-role='content'] .container");

1
私の好みのために$( '[data-role = "content"] .container'、 '#property'); より読みやすいです。
n3rd

26
@ n3rdおもしろい、私はそのアプローチがまったく読めるとは思いませんが、それぞれの人に彼らが言うように。
MikeSchinkel 2013年

19

最近のバージョンの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はこのコードスタイルの重要性を過大評価していると思います。


4
最初のテストでは、直接の子孫の選択「>」を使用しています。「>」なしで最初のテストを実行しました。「find」を使用する方が高速です。jsperf.com/jquery-find-vs-insel/12
beardedlinuxgeek

この中で最も興味深いのは、Safariの最新バージョンが直接法を処理するのに約25%速いということです。私は彼らが何をしたのかわかりませんが、明らかに他のすべてのブラウザは追いついていません。
Uxonith 2015年

14

最初の質問は、Alt + Enterを押して、リストの最初のヒントを選択してからEnterを押すことです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.