javascript - Jquery 事件性能与内存使用情况

标签 javascript jquery jquery-events

我正在开发一个完全ajax Web 项目,其中部分内容始终通过DOM 操作或使用jQuery 的加载函数生成。我一直在使用“live”,但我非常有兴趣放弃“live”并使用“on”来提高性能。当新页面加载时,该部分所需的一组全新绑定(bind)也需要加载。 html 部分有一些永远不会改变的父 DOM(基本上是网页不同内容区域的包装器),允许我为将来在页面上创建的所有 DOM 元素对它们进行绑定(bind)。

就内存和性能权衡而言,哪种方法通常是处理事件绑定(bind)的更好方法?

  1. 新部分完成加载其 html 后,将该特定页面实例所需的所有事件绑定(bind)到 DOM 元素上,这些元素将在页面更改时删除。

  2. 将第一个页面加载上的每个事件绑定(bind)到已知始终存在的 DOM 元素(而不是像 live 那样绑定(bind)到文档)。

最佳答案

监听器的内存问题通常可以相当容易地处理(不要在闭包中保存大量数据,不要创建循环引用,使用委托(delegate)等)。

“Live”只使用委托(delegate)(据我所知) - 您可以非常简单地实现委托(delegate),而无需使用简单的标准,例如class 或 id,监听器位于不变的父元素上。委派是一个很好的策略,它取代了许多其他监听器,内容不断变化,并且识别应该调用函数的元素很简单。

如果您遵循每次内容更改时附加大量新监听器的策略,那么您还必须在替换旧监听器时将其分离,作为减少内存泄漏可能性的策略。性能(就作为 DOM 更新的一部分附加和删除监听器所花费的时间而言)通常不是什么大问题,除非您要执行数百个监听器。

通过委托(delegate),父元素监听事件,检查 event.target/srcElement 是否是它关心的事件,然后调用适当的函数(可能使用call)来设置值如果需要的话这个

请注意,您还可以简单地在插入的 HTML 中包含内联监听器,这样您就无需担心内存泄漏、委托(delegate)或添加和删除监听器。使用简单函数调用的内联监听器并不比添加任何其他属性(类、id 等)更复杂,并且在客户端上需要零额外编程。我认为内联监听器从来都不是内存泄漏的问题。

当然,“unobtrusive javascript”暴徒会嚎叫,但它们非常实用、实用且强大,更不用说每个支持 javascript 的浏览器都支持。

关于javascript - Jquery 事件性能与内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9404576/

相关文章:

javascript - 用户停止滚动时的事件

javascript - 在 javascript 中获取所有表单值并将值发送回 php 页面

具有多个元素的 jQuery UI 可排序抛出 "TypeError: Cannot read property ' insertBefore' of null"

javascript - 无需将鼠标悬停在 WordPress 中的 Image Accordion Gallery 上即可显示标题

jQuery 动画不够流畅

javascript - 检测控件的 "Class"属性何时更改的任何事件

javascript - mailto 和重定向一起

javascript - 如何仅在我需要时向 MirajeJS js 发出请求

javascript - 模态内的模态,切换下一个时无法关闭当前一个

javascript - 检查 JQuery 对象是否在命名空间下有事件的优雅方法