mirror of
https://github.com/GoogleChromeLabs/squoosh.git
synced 2025-11-15 10:09:45 +00:00
OxiPNG + threads PoC
This commit is contained in:
committed by
Ingvar Stepanyan
parent
685558847f
commit
4c658b79ef
32
codecs/oxipng/spawn.js
Normal file
32
codecs/oxipng/spawn.js
Normal 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 });
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user