Неефективні попередження щодо використання jQuery в PHPStorm IDE


100

Нещодавно я оновив свою версію PHPStorm IDE, і тепер вона попереджає мене про неефективне використання jQuery.

Наприклад:

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

Підказує це попередження:

Перевіряє ефективність використання селекторів jQuery. Він пропонує розділити селектори нащадків, які мають збірник із селектором ідентифікаторів, і попереджає про дублювання селекторів, які можна кешувати.

Отже, моє питання:

Чому це неефективно і який ефективний спосіб зробити вищевказаний селектор?

Я б здогадався:

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

Це правильний шлях?

Відповіді:


156

У мене було те саме питання сьогодні і мені вдалося знайти рішення завдяки Скотту Косману тут .

В основному, відповідь полягає в тому, щоб вибрати ідентифікатори індивідуально, а потім використовувати .find(...)для чогось нижче. Отже, беручи свій приклад:

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

Змінивши це, зробить PhpStorm щасливим і, очевидно, може бути більш ніж удвічі швидшим :

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

1
На мій смак $ ('[data-role = "content"] .container', '#property'); є більш читабельним.
n3rd

26
@ n3rd Смішно, я взагалі не вважаю такий підхід читабельним, але вони говорять про свій власний.
MikeSchinkel

19

Я вважаю, що різниця між двома методами при використанні останніх версій jQuery та браузерів незначна. Я створив тест, який показує, що зараз насправді на 10% швидше робити комбінований селектор, а не вибір на id, а потім знайти для дуже простого випадку:

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

Для вибору декількох дітей за класом на будь-якій глибині "пошук" виявляється швидшим:

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

Про це були певні дискусії на форумах jQuery, але його три роки: https://forum.jquery.com/topic/which-jquery-selection-is-efficient Як вони зазначають тут, якщо ви робите багато Операції з тим самим селектором id, найбільше підвищення продуктивності виявляється кешуванням елемента верхнього рівня. З іншого боку, якщо ви робите лише кілька виборів, різниці в продуктивності практично не буде.

Тому я вважаю, що IntelliJ завищує важливість цього стилю коду.


4
У вашому першому тесті ви використовуєте прямий відхильник вибору ">". Я провів ваш перший тест без ">", а використання "знайти" швидше. jsperf.com/jquery-find-vs-insel/12
beardedlinuxgeek

Мені в цьому найцікавіше є те, що останні версії Safari обробляють прямий метод найшвидше на 25%. Я не знаю, що вони зробили, але, мабуть, всі інші браузери не причепилися.
Уксоніт

14

Перше питання - натиснути клавішу Alt + Enter і вибрати першу пораду у списку, потім натиснути Enter, ви побачите, що вона вважає найефективнішим способом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.