PHPStorm IDE'de verimsiz jQuery kullanım uyarıları


100

Yakın zamanda PHPStorm IDE sürümümü yükselttim ve şimdi beni verimsiz jQuery kullanımı konusunda uyarıyor.

Örneğin:

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

Bu uyarıyı verir:

JQuery seçicilerinin verimli bir şekilde kullanıldığını denetler. Önünde ID seçici bulunan alt seçicilerin bölünmesini önerir ve önbelleğe alınabilecek çoğaltılmış seçiciler hakkında uyarıda bulunur.

Yani sorum şu:

Bu neden verimsizdir ve yukarıdaki seçiciyi yapmanın etkili yolu nedir?

Tahmin ederim:

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

Bu doğru yol mu?

Yanıtlar:


156

Bugün de aynı soruyu sormuştum ve burada Scott Kosman sayesinde bir çözüm bulabildim .

Temel olarak cevap, kimlikleri ayrı ayrı seçmek ve ardından .find(...)aşağıdaki herhangi bir şey için kullanmaktır . Öyleyse örneğinizi ele alalım:

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

Bunu buna değiştirmek PhpStorm'u mutlu eder ve açıkça iki kattan daha hızlı olabilir :

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

1
Benim zevkime göre $ ('[data-role = "içerik"] .container', '#property'); daha okunaklı.
n3rd

26
@ n3rd Komik, bu yaklaşımı hiç okunabilir bulmuyorum, ama her birine kendi diyorlar.
MikeSchinkel

19

JQuery'nin son sürümlerini ve tarayıcıları kullanırken iki yöntem arasındaki farkın ihmal edilebilir olduğuna inanıyorum. Kimlik üzerinde seçim yapmak yerine bir birleşik seçici yapmanın artık% 10 daha hızlı olduğunu ve ardından çok basit bir durum bulmanın aslında% 10 daha hızlı olduğunu gösteren bir test oluşturdum:

http://jsperf.com/jquery-find-vs-insel

Herhangi bir derinlikte sınıfa göre birden çok alt öğe seçimi için "bul" daha hızlı görünmektedir:

http://jsperf.com/jquery-find-vs-insel/7

JQuery forumlarında bununla ilgili bazı tartışmalar yapıldı, ancak 3 yaşında: https://forum.jquery.com/topic/which-jquery-selection-is-efficient Burada da belirttikleri gibi, eğer çok şey yapıyorsanız aynı id seçicideki işlemlerde, en büyük performans artışı, üst düzey öğenin önbelleğe alınmasıyla elde edilir. Öte yandan, sadece birkaç seçim yapıyorsanız, neredeyse hiç performans farkı olmayacak.

Bu nedenle IntelliJ'in bu kod stilinin önemini abarttığına inanıyorum.


4
İlk testinizde, doğrudan doğruya ">" seçeneğini kullanıyorsunuz. İlk testinizi ">" olmadan yaptım ve "bul" u kullanmak daha hızlı. jsperf.com/jquery-find-vs-insel/12
Beardedlinuxgeek

Bu konuda en ilginç bulduğum şey, Safari'nin en son sürümlerinin doğrudan yöntemi yaklaşık% 25 oranında en hızlı şekilde işlemesi. Ne yaptıklarını bilmiyorum, ama görünüşe göre diğer tüm tarayıcılar yakalanmadı.
Uxonith

14

İlk soru Alt + Enter tuşlarına basmak ve listedeki ilk ipucunu seçmek ve ardından Enter tuşuna basmaktır, en verimli şekilde ne düşündüğünü göreceksiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.