【问题标题】:Memory Leaks in jQuery UIjQuery UI 中的内存泄漏
【发布时间】:2009-02-05 17:11:43
【问题描述】:

我有一个简单的页面,它由一个包含三个jQuery UI progressbars 的表和一个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();

【问题讨论】:

    标签: jquery ajax jquery-ui memory-leaks jquery-ui-progressbar


    【解决方案1】:

    你为什么要破坏然后重建它?将进度值重置为零并让它不理会,直到您以后再次需要它,这不是更简单吗?如果您特别不希望它可见,您甚至可以 .hide() 它。

    【讨论】:

    • 在我的应用程序中,我使用 Ajax 每 5 秒左右刷新一个数据表。该表保存在模板文件中,并在每次刷新后使用 jTemplates 替换它。除非您知道得更清楚,否则销毁只是在重新创建钢筋之前的预防措施。
    【解决方案2】:

    我想我要做的只是在应用程序启动时创建进度条,克隆它,并在完成处理后将其添加到我的模板中。这从本质上将内存使用量减慢到爬行(每 4-5 次刷新大约 4k)而不是当前(大约每刷新 100 到 300 k)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-02
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多