Я знаю, что некоторые запросы занимают немного больше времени, чем другие (например, сложные запросы медленнее, чем простые запросы, ids быстрее, чем классы и т.д.). В моем случае это имеет практическое значение. Интересно, как это относится к запросам в обработчиках событий.
Может ли запрос повлиять на скорость, с которой будет срабатывать обработчик событий? Или запрос уже разрешен каким-то указателем на этот объект в DOM?
Например, будут ли эти обработчики абсолютно эквивалентны? :
$("body > section > #id div.class element").click(func);
$("#element").click(func);
В случае, если вы укажете, скорость селектора повлияет только на начальную настройку страницы - скорость, чтобы найти элемент, на котором размещается обработчик событий. После того, как обработчик событий подключен, селектор не должен влиять на скорость срабатывания обработчика фактического события.
Случай, когда селекторная скорость может иметь значение для обработчика событий, будет заключаться в том, что вы используете функцию on()
для определения обработчиков событий для элементов, которые еще не существуют - "делегированные" события. Например:
$( "#dataTable tbody" ).on( "click", "tr", func);
против
$( "#dataTable tbody" ).on( "click", ".my-table-row", func);
Производительность первого обработчика событий будет лучше (хотя совершенно необходимо отметить, что разница обычно мала). Причина, по которой этот случай отличается от вашего примера, заключается в том, что фактический обработчик кликов помещается на tbody
, а затем селектор используется во время огня, чтобы определить, является ли данное событие совпадением.