PERF:frontend-store 中似乎存在内存泄漏

store.js 文件中似乎存在内存泄漏,当用户浏览不同主题时,每次 restful 请求都会导致 _identityMap 快速增长。如果没有适当的清理逻辑,该映射将耗尽内存并导致大的 JavaScript 堆。

也许可以在 store.js 中添加一个 pruneMap 函数,使用先进先出(FIFO)算法来移除最早的映射就足够了?

另外,变量 const MAX_ITEMS_PER_TYPE = 500; 可以进一步讨论,以在缓存和内存存储之间取得平衡。

3 个赞

您能告诉我们更多相关信息吗?

您有任何数据来支持这一点吗?

重现步骤如下:用户在不刷新页面的情况下,通过主题下的“建议/相关”链接从一个主题跳转到另一个主题多次,我的测试中 js 堆大小会从最初的 100MB 累积到大约 500MB,如果访问的主题足够多(特别是包含很多帖子的主题)。返回主页也不会释放这部分占用的内存。

这个 js 堆大小可以在浏览器控制台的性能(performance)选项卡中看到,内存消耗可以在浏览器的进程管理器中看到。

我已在 PR 中上传了一个展示此问题的视频(约 3 分钟,如果使用同一页面数小时,情况会更糟)。

另外,在这里添加一个断点将显示 _identityMap 中项目数量的增长。

但我不太确定是否是 _identityMap 导致了这个问题,只是提供一些信息供调查。

2 个赞

上面的 PR 将解决 OP 中报告的内存泄漏问题。:smiley:

6 个赞