解除从DOM中删除的元素的事件

时间:2014-04-09 12:23:21

标签: javascript jquery events dom

我正与一位开发人员讨论我们在iOS设备上使用网络应用时遇到的问题。它大量使用事件和jQuery。我们目前遇到的问题是应用程序在使用一段时间后运行缓慢。

我的同事建议问题在于我们将事件处理程序绑定在特定元素上,例如

$("div#id123").on("click", function(....){....});

而且,因为每当我们将新元素加载到DOM中时这样做,这些事件处理程序最终会“污染”浏览器,使其变慢。

一旦加载了一个新元素,旧元素就会完全从$("div#id456").remove() d开始,直到它们可能被再次加载(全新,没有任何类型的缓存)。

我无法反驳他,但我非常确定,只要删除旧元素,浏览器就会删除事件处理程序。毕竟:他为什么要留住他们?

他建议我重写所有处理程序,使其具有

的形式
$(document).on("click", "div.commonclass", function(....){...});

让文档级别的事件处理程序绑定到类,我们处理的所有元素都有共同点。

这对我来说意味着一些重大改写,我想避免因为我认为这不是我们问题的根本原因。

我对被删除元素上的事件的假设是否正确,如果是这样,我怎样才能告诉我的同事重写事件处理程序是不必要的浪费工作时间?

1 个答案:

答案 0 :(得分:1)

我发现当你专门为iOS应用程序使用javascript时,由于存在内存问题,你在使用jQuery时需要非常小心。我经常不得不在本机javascript中重写jQuery重要的javascript部分,以减少记忆足迹并确保它在iOS环境中有效工作。我发现在这种情况下调试的最佳方法是在Google Chrome中使用分析器。刚刚回答了类似的问题,请点击此处了解详情:Is there any possible danger of using "JQuery.on()" profusely

使用chrome Profiler时,请获取堆快照,进行更改,然后再拍摄另一个堆快照并进行比较。这样可以看到脚本更改的记忆影响。