Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery'的性能惩罚;s live()函数_Javascript_Javascript Events_Jquery - Fatal编程技术网

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时,它也将事件处理程序绑定到该元素。前者可能更容易,但后者可能提供稍微好一点(可能无法识别)的性能