1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2025-12-09 16:21:51 +00:00

Compression: Terminate workers after use

While the browser engine can clean up workers automatically, it's a good
idea to terminate them as soon as we don't need those anymore. It's
generally suggested to reuse a single worker for repetitive operations,
but implementing such a system is much harder. In addition, spawning a
new worker for each operation allows (de)compressing multiple blobs in
parallel :)
This commit is contained in:
Даниїл Григор'єв 2025-06-10 16:53:14 +03:00
parent 82dae1158e
commit 7cb3477a90
No known key found for this signature in database
GPG Key ID: B890DF16341D8C1D

View File

@ -23,6 +23,7 @@ export class DefaultCompression implements Compression {
resolve(response.result);
});
this.scheduleWorkerTermination(worker);
worker.postMessage(data);
return promise;
}
@ -43,7 +44,13 @@ export class DefaultCompression implements Compression {
resolve(response.result);
});
this.scheduleWorkerTermination(worker);
worker.postMessage(data, [data.buffer]);
return promise;
}
private scheduleWorkerTermination(worker: Worker): void {
worker.addEventListener("message", () => worker.terminate(), { once: true });
worker.addEventListener("error", () => worker.terminate(), { once: true });
}
}