Javascript 垃圾收集未使用的模块

Javascript 垃圾收集未使用的模块,javascript,ecmascript-6,es6-modules,dynamic-import,Javascript,Ecmascript 6,Es6 Modules,Dynamic Import,我使用动态导入加载用户在浏览器中编写的脚本。我首先将脚本内容放入一个blob,然后使用dynamicimport()将脚本作为模块加载。随着时间的推移,我希望这些脚本会发生变化并被销毁,因此相应的模块会被垃圾收集。然而,基于Chrome中的内存分析,这并没有发生 原因似乎与称为模块映射的东西有关。这是我在所有脚本都不再使用后拍摄的内存快照的屏幕截图 正如您所看到的,Window对象为这些模块提供了一条保留路径。在这种情况下,我肯定最终会耗尽内存,因为每次用户编辑脚本时都会创建这些模块 我想知道

我使用动态导入加载用户在浏览器中编写的脚本。我首先将脚本内容放入一个blob,然后使用dynamic
import()
将脚本作为模块加载。随着时间的推移,我希望这些脚本会发生变化并被销毁,因此相应的模块会被垃圾收集。然而,基于Chrome中的内存分析,这并没有发生

原因似乎与称为
模块映射的东西有关。这是我在所有脚本都不再使用后拍摄的内存快照的屏幕截图

正如您所看到的,Window对象为这些模块提供了一条保留路径。在这种情况下,我肯定最终会耗尽内存,因为每次用户编辑脚本时都会创建这些模块


我想知道是否有办法让Chrome(和其他浏览器)在这些模块不再使用时卸载它们。

我从中得到了一种感觉,也许答案是你不能让模块卸载。这是因为每个文档工作者只能对任何给定模块解析一次。我无法保证,一旦我扔掉了某个给定URL中的模块,我就再也不会使用它,因此ModuleMap无法允许收集内容

事实上,通过阅读Chromium源代码,我没有看到任何调用。这完全有可能不是所有相关的代码,但如果是的话,
ModuleMap
的任何给定实例都将永远挂在其模块上

从理论上讲,我似乎可以从网络工作者那里获得所需的行为,因为他们有不同的全球范围。如果有人能告诉我我是不是选对了树,那会很有帮助