Javascript JQuery代码中使用的CSS类上事件侦听器的性能开销

Javascript JQuery代码中使用的CSS类上事件侦听器的性能开销,javascript,jquery,event-delegation,Javascript,Jquery,Event Delegation,如果我的标记如下所示: <button id="button-1" class="nice"> <button id="button-2" class="nice"> <button id="button-3" class="nice"> 建立了多少个事件侦听器?1还是3 如果我有1000个按钮而不是3个,我应该使用事件委派吗 如果元素类在标记中包含大量元素,那么不在这些类上定义jQuery调用是否是性能方面的最佳选择 1) 3个事件侦听器都指向同一个函数

如果我的标记如下所示:

<button id="button-1" class="nice">
<button id="button-2" class="nice">
<button id="button-3" class="nice">
  • 建立了多少个事件侦听器?1还是3

  • 如果我有1000个按钮而不是3个,我应该使用事件委派吗

  • 如果元素类在标记中包含大量元素,那么不在这些类上定义jQuery调用是否是性能方面的最佳选择

  • 1) 3个事件侦听器都指向同一个函数

    2) 这取决于你想要完成什么

    3) 试着做一些基准测试,看看性能影响在哪里变得明显。我已经选择了多达1000个元素,然后在同一时间制作了动画,而且(在FF中)在大约600-700个元素之前,性能的影响是不可察觉的。性能当然取决于浏览器和JS引擎。一些(Chrome)会比其他(IE)更快。值得一提的是,对于那个站点,我使用了与您在问题中相同的方法。

    1)3

    2) 对


    3) 是的,正如您所说的,使用jQuery中通过函数提供的事件委派。小心,太多。现场功能也会影响性能,所以考虑本地事件委派。

    < P>完全同意!必须将事件侦听器添加到包含所有这些好元素的父元素中。这将大大提高性能

  • 是,因为
    $()
    函数返回一个数组,并且
    click()
    应用于其中的所有元素
  • 对。当您有大量可以触发事件的节点时,或者当这些节点的数量可以更改时,委托通常会获得最好的回报。这允许您只需初始化事件侦听器一次,而不管DOM发生什么情况。如果您计划拥有100多个节点,我将使用事件委托而不是事件处理
  • 对。这将提高您的响应时间(特别是对于超大列表[请进行基准测试]),并使您的初始化为O(1)而不是O(n)

  • 我不认为事件委派与.live方法有任何关系,它确实有关系。live委托人监听文档中的冒泡事件。@SolutionYogi,jQuery的live事件是通过事件委托实现的。文档中说“live”方法是通过“事件委托”实现的。这并不意味着可以通过.live方法使用“事件委派”。事件委托是一个非常通用的概念,它本身就存在。甚至在jQuery中引入.live方法之前,您就可以使用事件委派了。我认为您在玩文字游戏。正如你在我的帖子中所看到的,我知道事件dele不需要使用.live就可以使用!我通常只写我自己的,这不太难。你能提供一个例子,说明你是如何判断点击了哪个子元素的吗。我很难理解,如果听者是家长,你怎么能解决这个问题。
    $(".nice").click(function () { 
        // something happens
    });