阅读另一个关于jQuery性能的SO问题,我开始考虑使用事件委托而不是单独绑定元素的重要性。我主要考虑的是jQuery,但我认为它可能适用于Javascript。
事件授权有两个主要目的:
我的问题是关于其中的第二个问题。一般的答案可能是“它取决于确切的情况”,但我想知道是否有经验法则或基准测试方法来测试这一点。
所以,问题是:在事件委派的性能优势超过性能成本之前,您需要多少元素?
答案 0 :(得分:3)
假设这个HTML结构:
<ul id="navUL">
<li><a href="one.html">One</a></li>
<li><a href="two.html">Two</a></li>
<li><a href="three.html">Three</a></li>
</ul>
只是为了清理(对我而言)....根据jQuery docs(http://api.jquery.com/delegate/),这个:
$("#navUL").delegate("a", "click", function(){
// anchor clicked
});
......等同于:
$("#navUL").each(function(){
$("a", this).live("click", function(){
// anchor clicked
});
});
然而,事件授权(据我所知)是这样的:
$("#navUL").click(function(e) {
if (e.target.nodeName !== "A") { return false; }
// anchor clicked
// anchor is referenced by e.target
});
因此,您捕获UL元素上的click事件,然后确定通过event.target
属性实际单击了哪个锚点。
我不知道delegate()方法,但是最后一种技术应该总是比将事件处理程序附加到#navUL元素中的每个锚更快,如下所示:
$("#navUL a").click(function() {
// anchor clicked
// anchor is referenced by the this value
});