Javascript Aurelia自定义元素未在chrome中垃圾收集
我在我的Aurelia应用程序中发现了一个内存泄漏,其中一些自定义元素没有被垃圾收集器从对象图中删除,我完全迷失了方向 我使用ChromeDevTools内存快照工具跟踪所有引用,并能够删除所有引用。至少我在开发工具中再也找不到任何引用自定义元素的黄色节点了。现在我只有很多未清理的分离节点 有人知道找到这些参考资料的其他方法吗 我用npm模块Javascript Aurelia自定义元素未在chrome中垃圾收集,javascript,google-chrome,memory-management,memory-leaks,aurelia,Javascript,Google Chrome,Memory Management,Memory Leaks,Aurelia,我在我的Aurelia应用程序中发现了一个内存泄漏,其中一些自定义元素没有被垃圾收集器从对象图中删除,我完全迷失了方向 我使用ChromeDevTools内存快照工具跟踪所有引用,并能够删除所有引用。至少我在开发工具中再也找不到任何引用自定义元素的黄色节点了。现在我只有很多未清理的分离节点 有人知道找到这些参考资料的其他方法吗 我用npm模块heapsnapshot进行了尝试,并在自定义元素上使用了函数pathToRoot。此函数用于搜索根元素的递归路径。甚至这个函数也告诉我,我的自定义元素实
heapsnapshot
进行了尝试,并在自定义元素上使用了函数pathToRoot
。此函数用于搜索根元素的递归路径。甚至这个函数也告诉我,我的自定义元素实例没有到根的路径。那为什么它还在记忆中呢
如果有人想找到解决方案,我可以从chrome上提供堆快照。事实上,今天我在3天后找到了解决方案!我使用分析工具的方式是正确的,但我并不认为对开发工具的引用也会阻止垃圾收集。我在我的
app.js
中有一个事件侦听器来检测当前页面,并将其作为类呈现在我的路由器视图上。在这个监听器中有一个日志记录,它使用调试方法记录指令,然后在dev工具的日志输出和指令之间创建一个引用,从而创建对所有子视图的引用
ea.subscribe('router:navigation:complete', ({instruction}) => {
log.debug('Main route switched', instruction); // <<<<<<<<<<< Memory leak
this.currentRoute = instruction.router.currentInstruction && instruction.router.currentInstruction.config.name;
});
ea.subscribe('router:navigation:complete',({instruction})=>{
log.debug('Main route switched',instruction);//请共享演示问题并可复制的最少代码。很遗憾,共享代码是不可能的,因为它是一个基于Aurelia的更大的单页应用程序,而且是我的工作项目。因此,共享内容的可能性有限:(如果无法共享完整代码,请尝试用尽可能少的代码复制问题。请参阅