OxiPNG + threads PoC

This commit is contained in:
Ingvar Stepanyan
2020-04-25 14:28:16 +01:00
parent 1fd1b3041d
commit 8d991a256e
15 changed files with 378 additions and 69 deletions

32
codecs/oxipng/spawn.js Normal file
View File

@@ -0,0 +1,32 @@
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 });
});
}