perf: keep heavy work off UI thread

This commit is contained in:
Hakan Seven 2026-07-25 18:49:18 +03:00
commit deec48ad99
75 changed files with 11703 additions and 519 deletions

20
web/ocs-parse-worker.js Normal file
View file

@ -0,0 +1,20 @@
import init, { parse_document } from "./worker_pkg/ocs_web_worker.js";
const ready = init();
self.onmessage = async ({ data }) => {
try {
await ready;
const encoded = parse_document(data.name, new Uint8Array(data.bytes));
// wasm-bindgen returns a view into WebAssembly.Memory. Copy to a standalone
// ArrayBuffer before transferring it, otherwise the worker's wasm memory
// itself would be detached.
const transferable = encoded.slice();
self.postMessage({ ok: true, data: transferable.buffer }, [transferable.buffer]);
} catch (error) {
self.postMessage({
ok: false,
error: error instanceof Error ? error.message : String(error),
});
}
};