gpt4 book ai didi

javascript - Aurelia 自定义元素不是在 Chrome 中收集的垃圾

转载 作者:行者123 更新时间:2023-11-30 14:26:34 24 4
gpt4 key购买 nike

我在我的 Aurelia 应用程序中发现内存泄漏,我完全迷失了,垃圾收集器没有从对象图中删除一些自定义元素。

我使用 Chrome DevTools Memory Snapshot 工具来跟踪所有引用并能够删除所有引用。至少我再也找不到引用自定义元素的开发工具中的任何黄色节点。现在我只有很多未清理的分离节点。

enter image description here

有谁知道另一种查找这些引用文献的方法吗?

我尝试使用 npm 模块 heapsnapshot 并在自定义元素上使用函数 pathToRoot。此函数递归搜索到根元素的路径。甚至这个函数也告诉我,我的自定义元素实例没有根路径。那为什么它还在内存中呢?

如果有人想找到解决方案,我可以提供 chrome 的堆快照。

最佳答案

实际上今天我在 3 天后找到了解决方案!我使用分析工具的方式是正确的,但我并没有想到对开发工具的引用也会阻止垃圾收集。我在我的 app.js 中有一个事件监听器来检测当前页面并将其作为一个类呈现在我的 router-view 上。在这个监听器中有一个日志记录,它使用调试方法记录指令,然后在开发工具的日志输出和指令之间创建一个引用,因此是对所有 subview 的引用。

ea.subscribe('router:navigation:complete', ({instruction}) => {
log.debug('Main route switched', instruction); // <<<<<<<<<<< Memory leak
this.currentRoute = instruction.router.currentInstruction && instruction.router.currentInstruction.config.name;
});

TL;DR:不要只记录对象,因为它们将引用开发控制台。最好根据对象中的值创建一个要记录的新字符串。

关于javascript - Aurelia 自定义元素不是在 Chrome 中收集的垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51829510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com