如何保持动态加载模块而不持续增加内存使用量?

问题描述 投票:0回答:1

需要在 deno 上动态加载和序列化 esm 模块。据我所知,由于无法清除

await import()
上的缓存,因此我尝试在
WebWorker
内部导入,然后在完成后将其杀死。

Profiler 告诉我,所有导入的源代码都堆积在工作程序内部,但是在杀死工作程序后,我没有看到进程的内存使用量下降。 (使用

docker status
检查)

下面是简化的示例代码。

// worker.ts
self.onmessage = async (evt: MessageEvent) => {
  const mod = await import(evt.data);
  self.postMessage(JSON.stringify(mod));
}
// manager.ts
let worker = new Worker("./worker.ts");

// trying to clear source code piled up
setInterval(() => {
  worker.terimnate();
  worker = new Worker("./worker.ts")
}, 10_000);

worker.onmessage = (evt: MessageEvent) => console.log(e.data);

worker.postMessage('https://deno.land/x/[email protected]/index.ts')
javascript v8 deno
1个回答
0
投票

您可以尝试设置硬内存限制,例如

deno run --v8-flags='--max-heap-size=50,--max-old-space-size=50' \ https://deno.land/[email protected]/examples/welcome.ts

© www.soinside.com 2019 - 2024. All rights reserved.