在 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 个赞
saquetim
(Sérgio Saquetim)
8
上面的 PR 将解决 OP 中报告的内存泄漏问题。
6 个赞