jQuery Draggable:内存泄漏

时间:2016-05-12 01:35:45

标签: javascript jquery performance jquery-ui memory-leaks

我有一个简单的html表,由一些websocket处理程序定期更新:

<table class="schedule">
    <tr>
        <th>Header 1</th>
        <th>Header 2</th>
        <th>Header 3</th>
        ...
    </tr>
    <tr>
        <td class="order"><div>Text 1</div></td>
        <td class="order">Text 2</td>
        <td class="order">Text 3</td>
        ...
    </tr>
</table>

(总共14列和大约10-20行,每行中的第一个单元格有一个没有类的div元素;行也没有css类。)

每次更新时都会从表中删除所有行/单元格,并且只有在动态添加新的“order”单元格之后; dom中没有重复的表(已选中);单元格必须是可拖动的,所以如果我在更新表的函数末尾添加以下行,页面在堆中泄漏大约1 mb,则向DOM添加大约200个新侦听器和大约200个新节点。 GC从不收集这些对象:

var dnd = $("table.schedule td.order").draggable();

如果评论排除一切都很好,GC会收集所有内容。我怀疑问题出在我的选择器中,但我现在花了几个小时使用Chrome的工具,但仍然看不出问题所在。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:0)

您可能正在初次使用现有的可拖动元素初始化draggable(),添加新的侦听器和内容。

尝试使用

destroy方法
$("table.schedule td.order").draggable("destroy").draggable();

如果您可以使用sortable窗口小部件,它会有refresh标识可能更适合您的新元素。