我继承了一个jQuery应用程序,它通过在不离开页面的情况下调用AJAX服务来完成它的工作。
有一个项目列表,当你点击一个项目时,会显示项目的详细信息,附加到按钮的事件,然后处理html并创建新的html,附加新的事件等等。等等。
我想知道JavaScript垃圾收集是否会自动清理这些事件,或者它们是否会像某些Map一样进入数据结构并造成内存泄漏。我应该明确清理它们吗?
答案 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上更容易,而不是让他搜索它是否有引用,那么你应该将所有事件解除绑定/死亡。