jQuery的事件处理是否会导致内存泄漏?

myfunkyside

我正在阅读有关内存泄漏的信息,因为当我从IBM看到这篇文章时,我的站点的内存一直在堆积:

http://www.ibm.com/developerworks/web/library/wa-memleak/#N10116

闭包和循环引用
在清单5中,您可以看到一个闭包,其中JavaScript对象(obj)包含对DOM对象的引用(由id“ element”引用)。DOM元素又具有对JavaScript obj的引用。JavaScript对象和DOM对象之间产生的循环引用会导致内存泄漏。

清单5.事件处理内存泄漏模式:

<html>
<body>
<script type="text/javascript">
document.write("Program to illustrate memory leak via closure");
window.onload=function outerFunction(){
    var obj = document.getElementById("element");
    obj.onclick=function innerFunction(){
    alert("Hi! I will leak");
    };
    obj.bigString=new Array(1000).join(new Array(2000).join("XXXXX"));
    // This is used to make the leak significant
};
</script>
<button id="element">Click Me</button>
</body>
</html>

一个解决方案,他们给被设置objnull在的结束onload-function

(请参阅有人可以向我解释此javascript内存泄漏情况,以获取有关为什么会造成内存泄漏的说明)


现在,我很可能会在这里遗漏一些东西,这就是问题所在,但这不是当您添加jQuery事件处理程序时也会发生的事情吗:

<html>
<body>
<script type="text/javascript">
$(window).load(function() {
    $("element").on("click",function() {
        alert("Will this also leak?");
    });
};
</script>
<button id="element">Click Me</button>
</body>
</html>

click-handler里面的基本相同window.load-function,对吗?
我知道您没有创建一个var obj,但是代码仍然创建了一个jQuery对象

我是否真的在每个添加的jQuery处理程序中添加了内存泄漏?
还是我完全误解了这两种情况?

贝吉

当我从IBM遇到这篇文章时,我正在阅读内存泄漏的信息:http : //www.ibm.com/developerworks/web/library/wa-memleak/#N10116

那篇文章来自2007年。算了。循环引用越过DOM边界时遇到问题的浏览器会长时间死机。

我知道您不会创建var obj,但是代码仍会创建一个jQuery对象。

如果没有该变量,该函数将不会在对象上关闭,因此不会创建循环引用。无论如何,jQuery通过一种针对DOM元素未直接引用处理程序的古老浏览器的解决方法解决了此问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果将控件传递给其他类进行事件处理,是否会导致内存泄漏?

来自分类Dev

更改事件会导致内存泄漏,每次新的JQuery插件DataTables都会加载

来自分类Dev

订阅自己的C#事件会导致内存泄漏吗?

来自分类Dev

Task.Delay()循环是否会导致内存泄漏?

来自分类Dev

调用解构函数时,这是否会导致内存泄漏?

来自分类Dev

分配函数作用域成员是否会导致内存泄漏?

来自分类Dev

调用创建对象的函数是否会导致内存泄漏?

来自分类Dev

不带挂断调用的ManuallyDrop是否会导致内存泄漏?

来自分类Dev

自定义ClassLoader是否会导致内存泄漏?

来自分类Dev

Task.Delay()循环是否会导致内存泄漏?

来自分类Dev

调用解构函数时,这是否会导致内存泄漏?

来自分类Dev

这段代码是否会导致 JavaScript 内存泄漏

来自分类Dev

方法内部的处理程序是否会泄漏内存?

来自分类Dev

异步代码会导致内存泄漏吗?

来自分类Dev

NavigableMap的subMap会导致内存泄漏吗?

来自分类Dev

为什么QApplication会导致内存泄漏?

来自分类Dev

使用OpenMP编译会导致内存泄漏

来自分类Dev

ConditionalWeakTable的值会导致内存泄漏吗?

来自分类Dev

该程序会导致内存泄漏吗?

来自分类Dev

内存泄漏会导致getaddrinfo EMFILE吗

来自分类Dev

双向WeakMap会导致内存泄漏吗?

来自分类Dev

NavigableMap的subMap会导致内存泄漏吗?

来自分类Dev

使用OpenMP编译会导致内存泄漏

来自分类Dev

清空Array = []会导致内存泄漏吗?

来自分类Dev

由于OnItemKeyChanged事件导致Codefluent内存泄漏

来自分类Dev

使用Twisted + Cyclone + PyPy处理POST请求会导致内存泄漏吗?

来自分类Dev

使用Twisted + Cyclone + PyPy处理POST请求会导致内存泄漏吗?

来自分类Dev

使用d3.js键锁定事件处理程序关闭中的联接导致内存泄漏

来自分类Dev

持有通过Activity实现的接口是否会导致内存泄漏?

Related 相关文章

  1. 1

    如果将控件传递给其他类进行事件处理,是否会导致内存泄漏?

  2. 2

    更改事件会导致内存泄漏,每次新的JQuery插件DataTables都会加载

  3. 3

    订阅自己的C#事件会导致内存泄漏吗?

  4. 4

    Task.Delay()循环是否会导致内存泄漏?

  5. 5

    调用解构函数时,这是否会导致内存泄漏?

  6. 6

    分配函数作用域成员是否会导致内存泄漏?

  7. 7

    调用创建对象的函数是否会导致内存泄漏?

  8. 8

    不带挂断调用的ManuallyDrop是否会导致内存泄漏?

  9. 9

    自定义ClassLoader是否会导致内存泄漏?

  10. 10

    Task.Delay()循环是否会导致内存泄漏?

  11. 11

    调用解构函数时,这是否会导致内存泄漏?

  12. 12

    这段代码是否会导致 JavaScript 内存泄漏

  13. 13

    方法内部的处理程序是否会泄漏内存?

  14. 14

    异步代码会导致内存泄漏吗?

  15. 15

    NavigableMap的subMap会导致内存泄漏吗?

  16. 16

    为什么QApplication会导致内存泄漏?

  17. 17

    使用OpenMP编译会导致内存泄漏

  18. 18

    ConditionalWeakTable的值会导致内存泄漏吗?

  19. 19

    该程序会导致内存泄漏吗?

  20. 20

    内存泄漏会导致getaddrinfo EMFILE吗

  21. 21

    双向WeakMap会导致内存泄漏吗?

  22. 22

    NavigableMap的subMap会导致内存泄漏吗?

  23. 23

    使用OpenMP编译会导致内存泄漏

  24. 24

    清空Array = []会导致内存泄漏吗?

  25. 25

    由于OnItemKeyChanged事件导致Codefluent内存泄漏

  26. 26

    使用Twisted + Cyclone + PyPy处理POST请求会导致内存泄漏吗?

  27. 27

    使用Twisted + Cyclone + PyPy处理POST请求会导致内存泄漏吗?

  28. 28

    使用d3.js键锁定事件处理程序关闭中的联接导致内存泄漏

  29. 29

    持有通过Activity实现的接口是否会导致内存泄漏?

热门标签

归档