我们正在使用cytoscape.js在Angular JS应用程序中渲染图形,它似乎正在泄漏DOM节点。 Chrome开发者工具中的快照比较显示"实例"保留了分离的DOM树。全局cytoscape对象中的数组。
cytoscape实例是在指令的link函数中创建的,我想在范围$ destroy事件中清除这些对象。即使我手动取消对这些实例的引用,也有其他全局对象,如CanvasRenderer.data.container或CanvasRenderer.bindings []。target,它仍然保留这些元素,防止它们被垃圾收集。
我的问题是:cytoscape是否有一个destroy()方法可以释放对我可以在角度$ destroy事件上调用的DOM元素的引用?或者什么是摆脱这些全球参考的正确方法?
Chrome Dev Tools分析器的屏幕截图位于:https://drive.google.com/folderview?id=0B6OGkJMuELQHeC01U1FBYkd4NVU&usp=drive_web
(此处附加图片缺乏足够的声誉)
答案 0 :(得分:0)
选项:
(1)您可以重用Cytoscape.js实例和关联的DOM元素,而不是销毁它们。你会以这种方式获得更好的性能(尤其是那个DOM),这可能是你应该使用的方法。虽然您选择的框架可能限制了您在这方面的选择。
(2)您可以拨打私人cytoscape.removeRegistrationForInstance(cy)
。
这个问题源于一些使用注册作为jQuery插件的兼容性的旧代码。我会删除它,但你现在可以解决这个问题。
最后,请为功能请求或错误报告创建issues on Github。 Stackoverflow应仅用于帮助问题(例如“我不理解API中的此功能”等。)