可以添加jQuery监听器会降低浏览器性能吗?

时间:2010-04-13 13:18:32

标签: jquery ajax performance listeners

我有应用程序通过Ajax带来响应,并在每次刷新时创建5-20个新的jQuery单击侦听器。 IE和Mozilla浏览器似乎都在减慢使用速度。这会显着降低浏览器性能吗听众可以“被释放”吗?

3 个答案:

答案 0 :(得分:3)

添加Andy所说的关于生活的内容。

您应该对要添加到页面的元素使用delegatelive。听起来你没有将唯一事件绑定到新元素(每次刷新),而是重用函数。

在jQuery 1.4.2中,使用可以像这样使用delegate():

// the container,        the selector, "the event", the function to be called
$("#container").delegate(".selector",  "click",     function(){
  // do stuff...
});

这只需要调用一次,并且每个添加到“#container”的“selector”类的新元素都会绑定其click事件

答案 1 :(得分:2)

在删除元素或.bind()时,将释放使用.unbind()设置的侦听器。那些使用.live()设置的设置会一直存在,直到你调用.die()或者它们绑定的元素被删除(如果你指定,它可能在DOM中的某个地方,否则它将默认为DOM根目录 - {{ 1}}通过不绑定到目标元素来工作,因此可以删除/替换/更新元素,并且仍然绑定事件侦听器。

5-20个听众听起来有点太多 - 如果可能的话,考虑绑定较少的处理程序,因为旧的浏览器会在压力下破解得比新的浏览器快得多。

答案 2 :(得分:2)

您可以使用unbind取消绑定侦听器:

$("a").unbind("click"); // remove click event handler(s)
$("a").unbind(); // remove all event handlers

并使用die删除live个事件:

$("#foo").die(); // remove all live events
$("a").die("click"); // remove live click event handlers