繁体   English   中英

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

[英]Unbind events from elements that are removed from the DOM

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

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

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

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

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

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

他建议我重写所有处理程序以具有形式

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

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

这对我来说意味着一些重大改写,我希望避免这种改写,在我看来,这不是我们问题的根本原因。

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

我发现当你专门为iOS应用程序使用javascript时,由于内存开销,你需要非常小心使用jQuery。 我经常不得不在本机javascript中重写jQuery重的javascript部分,以减少记忆足迹并确保它在iOS环境中有效工作。 我发现在这种情况下调试的最佳方法是在谷歌浏览器中使用分析器。 刚刚回答了类似的问题,请点击此处获取更多信息: 使用“JQuery.on()”是否存在任何可能的危险

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM