有一堆有关如何删除所有“特殊”处理程序从要素问题(如的onclick)删除所有处理程序,或从一个元素清除所有事件等从所有元素
- How to remove all Click event handlers in Jquery
- Jquery: how to release all event handlers, dom changes?
这个问题有点宽泛。我们在IE7和IE8下面的asp.net网站面临着巨大的内存泄漏,并且缩小这些泄漏的一个调整是解除页面上所有元素的所有事件。基本上这个:
$('*').off();
现在,我们正在努力提高应用程序的性能,毫不奇怪,这个特定的行是热点之一。
所以,问题是:有没有什么方法可以更有效地达到相同的结果(明确地从文档中的所有元素中删除所有处理程序)?
不走的选择:
- “重新加载页面” - 内存泄漏保留这种方式。
- “每次你附加处理时间,你将它存储在阵列” - 有太多这样的地方
我在想的是使用一些jQuery的内部(甚至非公开API)利用附加的处理程序来检测元素。但它略高于我目前使用jQuery的能力。如果有帮助,我们将针对jQuery 1.7.1。
我以前做过这个。我的解决方案是保留一个全局数组来存储对元素的引用。所以每次我绑定一些东西的时候,我都会添加一个对数组的引用。然后,当我需要时,通过阵列循环并逐个解除绑定。它是一个乏味的解决方案。想知道更好的方法来做到这一点。 – AlexCheuk 2013-03-21 21:33:34
@AlexCheuk,这可能很麻烦。我希望我们可以遍历所有使用jQuery的文件,并修改处理程序附件以将处理程序附加到某个数组中......但实际上,我们有一个长期生活的产品,其中的附件遍布数百个文件。几乎没有自动化测试。即使没有考虑到开发工作,我们的QA团队也会杀了我们,如果我们这样做的话:)需要一个全球解决方案,不幸的是,蛮力不是一种选择。 – J0HN 2013-03-22 01:26:03