2014-08-29 163 views
0

我們正在使用cytoscape.js在Angular JS應用中渲染圖形,並且它似乎在泄漏DOM節點。 Chrome Dev Tools中的快照比較顯示,全局cytoscape對象中「instances」數組保留了獨立DOM樹。如何銷燬cytoscape.js實例

cytoscape實例是在指令的鏈接函數中創建的,我想清除作用域$ destroy事件上的這些對象。即使我手動取消對這些實例的引用,還有其他全局對象,如CanvasRenderer.data.container或CanvasRenderer.bindings []。target,它們仍然保留在這些元素上,以防止它們被垃圾收集。

我的問題是:cytoscape是否有一個destroy()方法,可以釋放這些DOM元素的引用,我可以調用角度$ destroy事件?或者什麼是擺脫這些全球參考的正確方法?

從Chrome瀏覽器開發工具探查截圖在這裏:https://drive.google.com/folderview?id=0B6OGkJMuELQHeC01U1FBYkd4NVU&usp=drive_web

(缺乏足夠的聲譽,這裏以圖片)

回答

0

選項:

(1)您可以重用Cytoscape.js實例和關聯的DOM元素而不是銷燬它們。你會以這種方式獲得更好的性能(尤其是w.r.t.的DOM),這可能是你應該使用的方法。雖然也許你選擇的框架限制了你在這方面的選擇。

(2)您可以撥打私人電話cytoscape.removeRegistrationForInstance(cy)

此問題源於一些使用註冊作爲jQuery插件的兼容性的舊代碼。我將刪除它,但現在可以解決此問題。

最後,請爲功能請求或錯誤報告創建issues on Github。 Stackoverflow只能用於幫助問題(例如「我不明白API中的這個函數」等)。

+0

此問題已通過快照修復[661]修復(https://github.com/cytoscape/cytoscape.js/issues/661) – GlobalVariable 2014-09-03 00:22:34