Files
squoosh/codecs/oxipng/spawn.js
Ingvar Stepanyan 4c658b79ef OxiPNG + threads PoC
2020-10-07 20:42:48 +01:00

33 lines
764 B
JavaScript

let main = new Worker("./main.js", { type: "module" });
let workers = Array.from(
{ length: navigator.hardwareConcurrency },
() => new Worker("./worker.js", { type: "module" })
);
main.addEventListener('message', ({ data: { type, data } }) => {
if (type === 'spawn') {
workers.pop().postMessage(data);
}
});
let ID = 0;
export function optimise(...args) {
return new Promise((resolve, reject) => {
let sendId = ID++;
main.addEventListener('message', function onMessage({ data: { ok, id, result } }) {
if (id !== sendId) return;
main.removeEventListener('message', onMessage);
if (ok) {
resolve(result);
} else {
reject(result);
}
});
main.postMessage({ id: sendId, args });
});
}