需要在 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')
您可以尝试设置硬内存限制,例如
deno run --v8-flags='--max-heap-size=50,--max-old-space-size=50' \ https://deno.land/[email protected]/examples/welcome.ts