2016-05-12 34 views
1

我有一個被一些網頁套接字處理程序週期性地更新一個簡單的HTML表格:jQuery的可拖動:存儲器泄漏

<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類要麼)

所有行/單元正從每次更新表中刪除,僅後的新的「順序」細胞加入到它動態;在dom中沒有重複的表(checked);電池必須是可拖動的,所以如果我在那個更新頁面泄露了1 MB表堆函數的末尾添加以下行,增加了約200個新的聽衆,並在DOM約200個新的節點。 GC從不收集這些對象:

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

如果評論指出一切正常,GC收集所有內容。我懷疑問題出在我的選擇器上,但我現在用Chrome的工具花了幾個小時,但仍然無法看到問題出在哪裏。任何幫助,高度讚賞。

回答

0

您在exisiting可拖動的元素,增加了新的聽衆和東西可能初始化draggable()了一個多一遍。

嘗試使用像

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

destroy方法如果你可以使用sortable小部件,而不是,它有一個refresh標識這可能會適合你更好的新元素。

+0

根據我的測試,摧毀之前,從表中刪除行和更新在我的情況做了之後INITING的新的小部件只是減緩了整個事情有點,但沒有任何「淨化」作用所有。 – Alex

+0

@Pikkolat也許你的代碼的其餘部分有內存泄漏。你應該分享一個[mcve] ... –

+0

正如我在我的問題中提到的,如果我只是用可拖動的符號註釋掉其他所有的東西都可以。所以,我認爲其餘代碼中的任何內容都沒有泄漏。 – Alex