Безусловный, «эффективный» слишком широк, чтобы говорить, что один метод является наиболее эффективным. Например, есть эффективность времени и пространства, и часто между ними есть компромисс. Кроме того, различные браузеры могут свободно реализовывать события, как они считают нужным, при условии, что они ведут себя так, как диктует стандарт W3C , ограничивающий выводы о стоимости времени и пространства.
Мы можем проанализировать затраты и эффективность в отношении потока событий . В каждом совместимом браузере событие сначала запускается в корневом элементе, затем в каждом промежуточном дочернем элементе, пока не достигнет цели, затем событие возвращается обратно к корню, снова вызывая промежуточные элементы. При выполнении каждого шага вниз и вверх по структуре документа во время потока событий будет затрачиваться время (выяснение, какой элемент активировать, поиск слушателей и т. Д.), Поэтому, если вы можете остановить событие как как можно раньше во время потока (как в вашем первом примере) есть потенциальная экономия времени. Конечно, специальная обработка каждой цели может компенсировать любой выигрыш, и может быть некорректно останавливать событие раньше.
Создание отдельной, но равной функции слушателя для каждого из набора элементов может привести к ненужным затратам памяти. Обратите внимание, что это не то же самое, что подписать одну и ту же функцию на несколько объектов. Например:
for (var i=0; i < elements.length; ++i) {
elements[i].observe('click', function (evt) {...});
}
может потребоваться больше памяти, чем:
elements.each('click', function (evt) {...});
Если JS engine interns функционирует, они будут использовать одинаковый объем памяти.
Одна вещь, которую мы не можем предположить, это то, как ищутся слушатели событий, учитывая событие и элемент. Тем не менее, обычно не так много слушателей для данного события и элемента, поэтому эффективность использования времени или пространства не должна вызывать беспокойства.
В конце концов, браузеры, кажется, реализуют события достаточно хорошо, чтобы различия в производительности не были проблемой. Таким образом, простота и удобочитаемость важнее, чем то, как вы определяете и подписываете слушателей событий.