【问题标题】:How to destroy a cytoscape.js instance如何销毁 cytoscape.js 实例
【发布时间】:2014-08-29 01:45:46
【问题描述】:

我们正在使用 cytoscape.js 在 Angular JS 应用程序中呈现图形,它似乎正在泄漏 DOM 节点。 Chrome 开发工具中的快照比较显示,全局 cytoscape 对象中的“实例”数组保留了分离的 DOM 树。

cytoscape 实例是在指令的链接函数中创建的,我想在作用域 $destroy 事件中清除这些对象。即使我手动取消对这些实例的引用,还有其他全局对象,如 CanvasRenderer.data.container 或 CanvasRenderer.bindings[].target 仍然保留这些元素,从而防止它们被垃圾收集。

我的问题是:cytoscape 是否有一个 destroy() 方法可以释放对这些 DOM 元素的引用,我可以在 angular $destroy 事件中调用这些元素?或者什么是摆脱这些全局引用的正确方法?

Chrome 开发工具分析器的屏幕截图在这里:https://drive.google.com/folderview?id=0B6OGkJMuELQHeC01U1FBYkd4NVU&usp=drive_web

(在此处附加图片缺乏足够的声誉)

【问题讨论】:

    标签: memory-leaks cytoscape.js


    【解决方案1】:

    选项:

    (1) 您可以重复使用 Cytoscape.js 实例和关联的 DOM 元素,而不是销毁它们。这样你会有更好的性能(尤其是 w.r.t. DOM),这可能是你应该使用的方法。尽管您对框架的选择可能限制了您在这方面的选择。

    (2)您可以拨打私人cytoscape.removeRegistrationForInstance(cy)

    这个问题源于一些旧代码使用注册作为 jQuery 插件的一些兼容性。我会删除它,但你现在可以解决这个问题。

    最后,请为功能请求或错误报告创建issues on Github。 Stackoverflow 只能用于帮助问题(例如“我不理解 API 中的这个函数”等)。

    【讨论】:

    • 此问题已通过快照修复661得到修复
    猜你喜欢
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 2019-03-30
    • 2019-02-22
    相关资源
    最近更新 更多