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

时间:2012-02-22 22:58:45

标签: javascript jquery javascript-events

我正在开发一个完全的ajax web项目,其中一节内容总是通过dom操作或使用jquery的加载函数生成。我一直在使用“直播”,但我非常有兴趣摆脱“现场”并使用“on”获得性能优势。当新页面加载该部分所需的全新绑定集时,还需要加载。 html部分有一些父doms(基本上是网页的不同内容区域的包装),它们永远不会改变,允许我对它们将在页面上创建的所有未来dom元素进行绑定。

在内存和性能权衡方面,这通常是处理事件绑定的更好方法吗?

1)新部分加载完html后,将该特定页面实例所需的所有事件绑定在页面更改时将删除的dom元素上。

2)将第一页上的每个事件绑定到dom元素(不是像文件一样的文件),这些元素已知存在。

1 个答案:

答案 0 :(得分:2)

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

“直播”只使用授权(据我所知) - 你可以使用简单的标准,例如,使用简单的标准来实现委托。 class或id,在不变的父元素上使用侦听器。委托是一个很好的策略,它取代了许多其他的听众,内容不断被改变,识别应该调用函数的元素很简单。

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

使用委托,父元素侦听事件,检查event.target/srcElement是否是它关心的事件,然后使用调用调用相应的函数来设置值如果需要。

请注意,您还可以在插入的HTML中简单地包含内联侦听器,然后您永远不必担心内存泄漏,委派或添加和删除侦听器。使用简单函数调用的内联侦听器并不比添加任何其他属性(类,id,等等)更复杂,并且在客户端上需要零额外编程。我不认为内联侦听器曾经是内存泄漏的问题。

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