jQuery UI 中的内存泄漏

发布于 2024-07-13 09:45:44 字数 1326 浏览 7 评论 0原文

我有一个简单的页面,其中包含一个带有三个 jQuery UI 进度条 的表格和一个 ajax 调用。

ajax 调用一个空的 php 文件,成功后我会销毁并重新创建进度条。

它看起来很简单,但运行它会导致 IE7Chrome 中的内存泄漏(尽管 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

嘦怹 2024-07-20 09:45:44

为什么要先破坏然后再重建呢? 将进度值重置为零并保留它直到稍后再次需要它不是更简单吗? 如果您特别不希望它可见,您甚至可以 .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.

北城挽邺 2024-07-20 09:45:44

我想我要做的只是在应用程序启动时创建进度条,克隆它,并在处理完成后将其添加到我的模板中。 这实质上将内存使用速度降低到了爬行速度(每 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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文