我应该在更改div内容之前删除事件吗?

时间:2011-11-13 16:04:07

标签: javascript jquery memory-leaks

我继承了一个jQuery应用程序,它通过在不离开页面的情况下调用AJAX服务来完成它的工作。

有一个项目列表,当你点击一个项目时,会显示项目的详细信息,附加到按钮的事件,然后处理html并创建新的html,附加新的事件等等。等等。

我想知道JavaScript垃圾收集是否会自动清理这些事件,或者它们是否会像某些Map一样进入数据结构并造成内存泄漏。我应该明确清理它们吗?

3 个答案:

答案 0 :(得分:2)

如果你总是绑定相同的事件,你也可以使用像jQuery live()或者喜欢的东西,而不是总是绑定/取消绑定它们。

答案 1 :(得分:2)

Javascript垃圾收集将删除已删除元素的绑定事件。 jQuery函数通常执行,具体取决于您使用的方法。

例如,.html().remove()将删除事件而不会泄漏内存。如有疑问,您可以随时使用.empty()


在我看来,.live()讨论与内存泄漏相当。从架构的角度来看,.live()的使用应该是有意义的。除非你需要在之前将事件绑定到,否则将元素添加到DOM中,或者 之后将元素删除(因为它可能会再次添加),然后{{1实际上是正确和快速的方法。 .bind().live()慢,因为每个事件都必须触发该元素,向.bind()冒泡,然后冒泡回到该元素,以便由document处理,与.live()同时,它可以立即执行。

此外,在最新版本的jQuery(1.7)中不推荐使用.bind.bind()。它们仍然可以运行,但新语法为.live(),使用委托替换.on()。这是因为过多的.live()会降低页面速度,因为每个.live()会将另一个事件绑定到.live,必须在每个事件中监听和处理这些事件。

答案 2 :(得分:1)

如果你想在GC上更容易,而不是让他搜索它是否有引用,那么你应该将所有事件解除绑定/死亡。