forked from external-repos/squoosh
33 lines
764 B
JavaScript
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 });
|
|
});
|
|
}
|