Какова разница в производительности между использованием отдельного обработчика для каждого события и одного общего обработчика, когда речь идет о массиве из 200 объектов?
Да, при использовании большого количества обработчиков событий может возникнуть дополнительная нагрузка на систему. Это связано с тем, что каждый обработчик занимает определенное количество памяти и процессорных ресурсов. В случае использования отдельного обработчика для каждого события в массиве из 200 объектов, система будет создавать 200 обработчиков, что может привести к увеличению потребляемых ресурсов и ухудшению производительности. В то время как использование одного общего обработчика для всех событий позволит оптимизировать использование ресурсов и уменьшить нагрузку на систему. Как правило, рекомендуется использовать общий обработчик для группы связанных событий, чтобы избежать избыточного потребления ресурсов. Тем не менее, в некоторых случаях, например, при необходимости различной логики обработки для каждого события, может быть целесообразно использовать отдельные обработчики.
<i>Обработчиков</i> у вас в любом случае 200 вешается. <br/> Вся разница в том, что в первом случае они ссылаются на двести функций, а во втором на одну. <br/> Создание функции требует определённых ресурсов, поэтому оверхед есть. Будет ли он <i>заметным</i> — это другой вопрос. Ответ на него зависит от того, что на самом деле в вашем коде происходит. На компьютере вы, скорее всего, разницы никогда не почувствуете, а вот на очень слабом телефоне при огромном количестве функций может начать тормозить. <br/> <br/> P.S. Проще использовать <a href="https://learn.javascript.ru/event-delegation" rel="nofollow">делегирование</a> в таких случаях.
Чёт перебор получился. Можно немного проще: <a href="https://codepen.io/yarkovaleksei/pen/xxexQKg?editors=1011" rel="nofollow">https://codepen.io/yarkovaleksei/pen/xxexQKg?edito...</a> <br/> <br/> <pre><code class="javascript">const ul = document.createElement('ul');
for (let i = 0; i <= 200; i++) {
let li = document.createElement('li');
li.innerText = `Строка ${i + 1}`;
li.setAttribute('data-index', i + 1);
ul.append(li);
}
document.body.append(ul);
document
.querySelector('ul')
.addEventListener(
'click',
function(event) {
if (!event.target.dataset?.index) {
return;
}
console.log(`Клик на строку ${event.target.dataset.index}`);
}
);</code></pre>