diff --git a/codecs/oxipng/spawn.ts b/codecs/oxipng/spawn.ts index 59293615..14b1c1b4 100644 --- a/codecs/oxipng/spawn.ts +++ b/codecs/oxipng/spawn.ts @@ -54,7 +54,12 @@ async function startMainThread() { return { optimise, + freeWorkers: () => { + for (const worker of resolvedWorkers) { + worker.terminate(); + } + }, }; } -export default startMainThread(); +export default () => startMainThread(); diff --git a/src/codecs/oxipng/encoder.ts b/src/codecs/oxipng/encoder.ts index ac54dd89..3232ea67 100644 --- a/src/codecs/oxipng/encoder.ts +++ b/src/codecs/oxipng/encoder.ts @@ -1,7 +1,12 @@ // @ts-ignore -import optimiser from '../../../codecs/oxipng'; +import init from '../../../codecs/oxipng/spawn'; import { EncodeOptions } from './encoder-meta'; export async function compress(data: ArrayBuffer, options: EncodeOptions): Promise { - return (await optimiser).optimise(new Uint8Array(data), options.level).buffer; + for (let i = 0; i < 100; i += 1) { + const optimiser = await init(); + console.log(`Run #${i}: ${optimiser.optimise(new Uint8Array(data), options.level).buffer.byteLength} bytes`); + optimiser.freeWorkers(); + } + return (await init()).optimise(new Uint8Array(data), options.level).buffer; }