代码之家  ›  专栏  ›  技术社区  ›  andyuk

可能是jquery内存问题与$('foo').remove()?

  •  7
  • andyuk  · 技术社区  · 17 年前

    我刚刚发现,当使用remove()函数时,匹配的元素不会从jquery对象中删除,只会从dom中删除。

    根据 remove() documentation :

    从中删除所有匹配的元素 DOM。这不会将它们从 jquery对象,允许您使用 进一步匹配的元素。

    当然,如果一个Web应用程序不断地从DOM中添加和删除元素,这将不断消耗越来越多的内存?有人能确认这是不是真的吗?如何才能避免这种情况?

    3 回复  |  直到 17 年前
        1
  •  7
  •   tvanfosson    17 年前

    我认为一旦超出范围,它将被垃圾收集(最终)。如果内存使用过度有问题,可以尝试在返回的对象上使用delete操作符。

        2
  •  2
  •   andyuk    17 年前

    我试着通过做一点测试来找到我自己问题的答案。

    <script type="text/javascript">
    $(document).ready(function() { 
        for ($i=1; $i<10000; $i++) {
            $('table').append("<tr id=\"test_" + $i + "\"><td>test " + $i + "</td></tr>");
            $('#test_'+($i-1)).remove();
        }
    });
    </script>
    <table>
        <tr><td id="test_0">test 0</td></tr>
    </table>
    

    我在remove()上使用以下方法进行了更改:

    var test = $('#test_'+($i-1)).remove();
    

    并与 delete operator (感谢Tvanfosson的建议):

    var test = $('#test_'+($i-1)).remove();
    delete test
    

    完成这些测试后,我仍然只使用remove()。很难判断是否存在内存泄漏,因为重新加载页面后,浏览器的内存使用率总是增加。也许其他人可以通过不同的测试代码来提供一个更确切的答案。

        3
  •  1
  •   RedWolves    17 年前