From 7cb3477a90cc0940dfc1fc3ed391477ef1351349 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D1=97=D0=BB=20=D0=93=D1=80=D0=B8?= =?UTF-8?q?=D0=B3=D0=BE=D1=80=27=D1=94=D0=B2?= Date: Tue, 10 Jun 2025 16:53:14 +0300 Subject: [PATCH] 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 :) --- src/js/core/compression.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/js/core/compression.ts b/src/js/core/compression.ts index cb43daa5..e131332b 100644 --- a/src/js/core/compression.ts +++ b/src/js/core/compression.ts @@ -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 }); + } }