IE6中的javascript内存泄漏与基本的jquery ui插件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了IE6中的javascript内存泄漏与基本的jquery ui插件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2448字,纯文字阅读大概需要4分钟。
内容图文
![IE6中的javascript内存泄漏与基本的jquery ui插件](/upload/InfoBanner/zyjiaocheng/964/6538b71eb6fb470eb404e8a96e4f5595.jpg)
首先,我在这个问题上进行了广泛的阅读和研究.已经有一张jquery UI的票,我正在关注它.我知道解决这个问题的方法,但我很好奇为什么会这样.我相信错误是由于关闭,但我的javascript-fu不是专家.
我认为jquery UI团队有更好的事情要做,而不是花费精力在IE6上.所以我想把它带到一般的javascript公开.
以下是测试用例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>jquery ui memory leak test</title>
<script type="text/javascript" src="jquery-1.5.js"></script>
<script type="text/javascript" src="jquery.ui.widget.js"></script>
<script type="text/javascript">
(function($) {
$.widget("ui.test", {
_create: function() {
}
});
$(document).ready(function() {
for (var i = 0; i < 1; i++) {
$("#container").append("<div id='inner'></div>");
$("#inner").test();
$("#inner").test("destroy");
$("#container").empty();
};
});
})(jQuery);
</script>
</head>
<body>
<div id="container">
</div>
</body>
</html>
我已经使用jquery 1.4.4和1.5以及jquery-ui-1.8.9和jquery-ui master(写作时)的所有组合进行了测试,但它们都产生了相同的结果.
我的测试小部件是我认为最简单的.
如果使用sIEve进行测试,则可以发现泄漏.否则,将计数器增加到1000,你会很容易看到内存增加.您还可以使用Microsoft的另一个tool来检测泄漏.
因此泄漏是由于小部件的_createWidget方法中的自定义事件绑定:
var self = this;
this.element.bind( "remove." + this.widgetName, function() {
self.destroy();
});
所以,如果我评论那些,那就没有泄漏.我使用的是1.8.9而不是master,因为1.8.9的widget代码看起来更简单(master已经改变了一点).
现在,如果我完全绑定窗口小部件之外的相同事件,也没有泄漏.例如,我在创建窗口小部件之后但在destroy之前插入以下代码:
$("#inner").bind("remove.test", function() {});
我故意添加了一个无操作函数,但回调函数里面的内容并不重要.你可以争辩说,因为我之后手动破坏,所以不需要绑定.但这不是重点.
所以我的问题是为什么原始代码,小部件代码中的绑定调用会泄漏?我怀疑这是因为关闭,但我无法解释.
有人可以解释一下吗?
解决方法:
据我所知,当JS变量指向DOM对象时,JS和DOM之间存在循环引用时会发生问题,并且该DOM对象具有指向JS变量的属性(或通常是事件处理程序) .上面的.bind()示例似乎是这样做的.显然,IE在其垃圾收集过程中使用引用计数,并且不会收集循环引用.
我已经看到至少有几个MSDN博客将此归咎于JavaScript并且基本上建议避免关闭,这显然不是很有帮助,但是这里有一些非Microsoft / MSDN文章讨论了这个问题并提供了一些解决方法:
http://laurens.vd.oever.nl/weblog/items2005/closures/
http://www.ibm.com/developerworks/web/library/wa-memleak/
JavaScript Closures and Memory Leaks
内容总结
以上是互联网集市为您收集整理的IE6中的javascript内存泄漏与基本的jquery ui插件全部内容,希望文章能够帮你解决IE6中的javascript内存泄漏与基本的jquery ui插件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。