Я играл с рабочими и хотел знать, что именно мне нужно сделать, чтобы полностью избавиться от него. До недавнего времени я думал, что их можно будет прекратить и удалить ссылки на них, но недавно я провел тест на нем и обнаружил, что все еще используется ram без необходимости.
Я использовал следующий код для создания и удалить некоторых рабочих (да, мне нужно было создать 100000 из них, чтобы получить заметный результат, но меня беспокоит только наличие потенциальной утечки поршня). после создания и удаления они использовали 2000 МБ оперативной памяти, которая быстро сократилась до 300 МБ после того, как был выполнен сбор мусора.
Кто-нибудь знает, для чего эти 300 МБ все еще используются и как я могу избавиться от них? их? мой код:
function inlineWorker (fun) {
if (fun !== undefined && typeof fun === "function") {
const burl = URL.createObjectURL(new Blob([
"(" + fun.toString() + ")()"
], { type: 'application/javascript' }));
const worker = new Worker(burl);
URL.revokeObjectURL(burl);
return worker;
} else {
throw "wrong argument";
}
}
let workers = [];
for (let i = 0; i < 100000; i++) {
workers.push(inlineWorker(function () {
this.addEventListener("message", function (data) {
this.postMessage(data.data);
});
}));
workers[workers.length - 1].addEventListener("message", function (data) {
console.log(data.data);
});
workers[workers.length - 1].terminate();
}
workers = undefined;
window.addEventListener("resize", function () {
console.log(workers);
});