Javascript jQuery'的性能惩罚;s live()函数
对于某些元素,每当将鼠标悬停在它们上方时,我希望这些元素变大,然后在取消悬停时缩小。所以我只使用Javascript jQuery'的性能惩罚;s live()函数,javascript,javascript-events,jquery,Javascript,Javascript Events,Jquery,对于某些元素,每当将鼠标悬停在它们上方时,我希望这些元素变大,然后在取消悬停时缩小。所以我只使用$('.elementClass').hover(函数(){放大(这个);},函数(){收缩(这个);})。我把它放在$(function(){})中所有网页的区域,因为许多网页都有这些类型的元素 有时我需要创建新的动态元素,它们上面有这些元素。当然,我必须为它们再次调用上面的悬停函数,因为它们最初并不存在 似乎最方便的是只需一整组$('.variousClasses').live('variousE
$('.elementClass').hover(函数(){放大(这个);},函数(){收缩(这个);})代码>。我把它放在$(function(){})中代码>所有网页的区域,因为许多网页都有这些类型的元素
有时我需要创建新的动态元素,它们上面有这些元素。当然,我必须为它们再次调用上面的悬停函数,因为它们最初并不存在
似乎最方便的是只需一整组$('.variousClasses').live('variousEvents',function(){})代码>调用每个网页中所有可能的功能,如上述
所以问题是,如果调用live()?重要的是,我只在需要时调用hover()
或live('hover')
(和其他事件)是否重要?作为对您问题的一般回答,您应该尝试最小化无关的函数调用——在动态内容情况下可能更是如此
特别是,live()
是解决这个问题的一个很好的例子,因为它确实带来了一些(潜在的)严重的性能问题。调用live()
时,jQuery会将您选择的事件绑定到文档
对象。这意味着每次触发事件时,它都会从原始元素冒泡到文档
对象。根据您的站点结构(以及一般情况),这可能会很昂贵
使用delegate()
最好使用jQuery的delegate()
函数,尤其是当您有一个预定义的父容器元素,所有事件都将在该元素中触发时。使用delegate()
时,基本上使用的是live()
的受限版本,因此事件只会传播到指定的父元素。因此,您可以避免在不关心的元素上引发许多潜在的代价高昂的事件
在您的情况下,由于您使用的是动态生成的内容,因此您必须使用上述函数或设置代码,以便在将元素插入DOM时,它也将事件处理程序绑定到该元素。前者可能更容易,但后者可能提供稍微好一点(可能无法识别)的性能