производительность jquery - .on по сравнению с onclick ()

0

Два основных вопроса, с которыми мне трудно найти ответы, следующие:

1) Эффективность привязки функции щелчка против ее запуска через onclick = "doness()", как в:

$("#id").find('a').on('click',function(){
    $(this).doingness();
});

против:

<div id="id"><a onlick="doingness()"></a></div>

function doingness(){
    $('#id').do();
}

Мне кажется, что второй может работать лучше всего, поскольку привязка не требуется, пока пользователь фактически не нажмет, поэтому скрипту не нужно искать всю DOM, чтобы найти идентификатор и связать что-то с ним. это правильно?

Затем я слышал, что использование этих (независимо от того, что это называется) очень дорогостоящее:

$('body').on('click', '#id', function(){
    $(this).do();
});

Конечно, я использую пару из них с динамически загруженным контентом, чтобы функции сохранялись в живых. Я предполагаю, что удар по производительности в основном связан со всей функцией, которая должна храниться в памяти, и, вероятно, снова и снова перерабатывается, чтобы проверить, не должно ли оно снова срабатывать или нет. Вместо этого кода я недавно понял, что вместо этого я могу просто добавить onclick = "doness()" в html, и мой вопрос в том, поможет ли эта работа?

  • 1
    Вы пробовали бенчмаркинг с jsPerf или подобным?
  • 0
    я бы даже здесь задавал вопрос, если бы все это сделал?
Показать ещё 2 комментария
Теги:
onclick

1 ответ

1
Лучший ответ

Сравнивая подход 1 с подходом 2, встроенный "onclick" будет быстрее в том смысле, что DOM не нужно перемещать для поиска нужного узла (первый поиск по id, а затем по a-тегу внутри элемента с помощью Я бы). Но, честно говоря, я думаю, что дополнительная производительность (которая действительно не так важна, если, возможно, вы не пишете высокопроизводительные игры или нет) не перевешивает улучшения в разделении кода, предлагаемый первым подходом.

Ваш последний блок кода, на мой взгляд, - это то, что вам следует избегать. Эта форма встроенного метода с параметром селектора должна использоваться (imo), когда событие должно обрабатываться по целому ряду элементов (например, захват события click на каждом td в большой таблице). В этом случае это большое улучшение производительности, поскольку вам понадобится только один обработчик событий, а не, возможно, сотни или тысячи. Однако вы делаете это с помощью id-селектора, поэтому вы используете его только для одного элемента. Я понимаю добавленный бонус, что он будет работать, если элемент динамически вставлен, но вместо этого вы должны ждать с привязкой события до тех пор, пока элемент не вставлен, и не пойдете на обычный способ захвата события.

В этом случае также будет работать подход onclick, и я думаю, что это улучшит производительность, но опять же, это не стоит того, потому что вы жертвуете разделением кода.

  • 0
    отлично спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню