2014-08-29 106 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