【发布时间】:2013-05-29 14:03:46
【问题描述】:
通过性能将事件处理程序附加到 jQuery 中的元素的最佳方法是什么?
我想为它们附加事件处理程序的所有元素都是静态的 而且我们没有任何生成和动态创建的元素:
<div class="foo"></div>
<div class="bar"></div>
<div class="qux"></div>
我想将click 事件处理程序分别附加到所有它们,我有三个选项。
我。直接附加事件处理程序
在这个经典方法中,我将事件处理程序直接附加到元素:
$('.foo').on('click', f);
$('.bar').on('click', g);
$('.qux').on('click', h);
二。多次将事件处理程序附加到父级
在这个方法中,我会为每个元素多次将事件处理程序附加到父处理程序,而不是以前的方法:
$('body').on('click', '.foo', f);
$('body').on('click', '.bar', g);
$('body').on('click', '.qux', h);
三。一次将事件处理程序附加到父项
这个方法和以前的方法一样,只是有一点不同。 我只会附加一次事件处理程序,我会检查 处理程序本身中所需的选择器:
$('body').on('click', function (e) {
var $elem = $(e.target);
if ($elem.is('.foo')) { f(); }
else if ($elem.is('.bar')) { g(); }
else if ($elem.is('.qux')) { h(); }
});
我想知道哪个性能最好?
【问题讨论】:
-
jsperf 对此有何看法? jsperf.com/test-so-1
-
如果您担心性能(为什么?),请不要使用 jQuery。
-
如果 3 是实数,我不会担心性能,而是担心可维护性/可读性。您能更具体地说明您的担忧吗?
-
@roasted 你能告诉我更多关于 jsperf 的信息吗?也许发布一个答案?我运行了两次测试,它显示第三次最快。
-
第三个选项是最快的绑定,但不是触发事件。这是两个不同的东西。
标签: jquery performance event-handling