簡體   English   中英

Aurelia 自定義元素未在 chrome 中垃圾收集

[英]Aurelia custom element not garbage collected in chrome

我在我的 Aurelia 應用程序中發現了內存泄漏,我完全迷失了,其中一些自定義元素沒有被垃圾收集器從對象圖中刪除。

我使用 Chrome DevTools 內存快照工具來跟蹤所有引用並能夠刪除所有引用。 至少我在開發工具中找不到任何引用自定義元素的黃色節點。 現在我只有很多未清理的分離節點。

在此處輸入圖片說明

有誰知道另一種找到這些參考文獻的方法?

我使用 npm 模塊heapsnapshot進行了嘗試,並在自定義元素上使用了pathToRoot函數。 此函數遞歸搜索根元素的路徑。 甚至這個函數也告訴我我的自定義元素實例沒有根路徑。 那么為什么它仍然在內存中呢?

如果有人想嘗試找到解決方案,我可以從 chrome 提供堆快照。

其實今天我在3天后找到了解決方案! 我使用分析工具的方式是正確的,但我沒有想到對開發工具的引用也會阻止垃圾收集。 我在app.js一個事件偵聽器來檢測當前頁面並將其呈現為我的router-view上的一個類。 在這個監聽器中有一個日志記錄,它用調試方法記錄了指令,然后在開發工具的日志輸出和指令之間創建了一個引用,因此是對所有子視圖的引用。

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 :不要只記錄對象,因為它們將引用到開發控制台。 最好根據對象中的值創建一個要記錄的新字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM