jQuery UI 中的内存泄漏
我有一个简单的页面,其中包含一个带有三个 jQuery UI 进度条
的表格和一个 ajax 调用。
ajax 调用一个空的 php 文件,成功后我会销毁并重新创建进度条。
它看起来很简单,但运行它会导致 IE7
和 Chrome
中的内存泄漏(尽管 Chrome 处理得更优雅)。
这是我的代码:
<script type="text/javascript" src="jQuery/js/jquery-1.3.1.js"></script>
<script type="text/javascript" src="jQuery/js/plugins/jquery-ui-1.6rc4.min.js"></script>
<link rel="stylesheet" type="text/css" href="jQuery/css/ui.all.css" />
<script type="text/javascript">
$(function(){
timed();
});
function timed()
{
$.ajax({
url: "index.php",
success: function(msg){
$(".progressbar").progressbar("destroy").progressbar();
}
});
setTimeout("timed()",1000);
}
<table>
<tbody>
<tr>
<td>
<div class="progressbar"></div>
</td>
<td>
<div class="progressbar"></div>
</td>
<td>
<div class="progressbar"></div>
</td>
</tr>
</tbody>
对于我在这里缺少的东西有什么想法吗?
我尝试在 Success 函数中的 $(".progressbar")
行之前添加 $("*").unbind();
。
I have a simple page that consists of a table with three jQuery UI progressbars
and an ajax call.
The ajax calls out to an empty php file and on success I destroy and recreate my progressbars.
It seems simple but running it caused memory leaks in both IE7
and Chrome
(although Chrome handled it much more gracefully).
Here's my code:
<script type="text/javascript" src="jQuery/js/jquery-1.3.1.js"></script>
<script type="text/javascript" src="jQuery/js/plugins/jquery-ui-1.6rc4.min.js"></script>
<link rel="stylesheet" type="text/css" href="jQuery/css/ui.all.css" />
<script type="text/javascript">
$(function(){
timed();
});
function timed()
{
$.ajax({
url: "index.php",
success: function(msg){
$(".progressbar").progressbar("destroy").progressbar();
}
});
setTimeout("timed()",1000);
}
<table>
<tbody>
<tr>
<td>
<div class="progressbar"></div>
</td>
<td>
<div class="progressbar"></div>
</td>
<td>
<div class="progressbar"></div>
</td>
</tr>
</tbody>
Any ideas for what I'm missing here?
I've tried adding $("*").unbind();
before the $(".progressbar")
line in my Success function.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为什么要先破坏然后再重建呢? 将进度值重置为零并保留它直到稍后再次需要它不是更简单吗? 如果您特别不希望它可见,您甚至可以 .hide() 它。
Why are you destroying then recreating it? Wouldn't it be simpler to just reset the progress values to zero and leave it alone until you need it again later. You can even .hide() it if you specifically don't want it visible.
我想我要做的只是在应用程序启动时创建进度条,克隆它,并在处理完成后将其添加到我的模板中。 这实质上将内存使用速度降低到了爬行速度(每 4-5 次刷新大约 4k),而不是当前的速度(每次刷新大约 100 到 300k)。
I think what I'll do is just create the progress bar at the application start, clone it, and add it to my template after its finished processing. This essentially slows the memory usage to a crawl (about 4k every 4-5 refreshes) rather than the current (about 100 to 300 k per refresh).