perf(compiler): share client function state closures
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { expect, test } from "bun:test";
|
||||
import { gzipSync } from "bun";
|
||||
import { generateTargets, parse } from "../src/index.ts";
|
||||
|
||||
const ast = parse(`component ConfirmDialog {
|
||||
@@ -130,7 +131,7 @@ test("browser codegen binds peer client functions through the scoped function ta
|
||||
view { <button @click='run()'>{value}</button> }
|
||||
}`),
|
||||
);
|
||||
expect(targets.browser).toContain("context.functions");
|
||||
expect(targets.browser).toContain('implementations["increment"]');
|
||||
const executable = new Function(
|
||||
`${targets.browser.replace(/^export\s+/gm, "")}\nreturn { bindClientScope };`,
|
||||
)() as { bindClientScope: (context: Record<string, unknown>) => Record<string, () => void> };
|
||||
@@ -200,3 +201,27 @@ test("the deferred commit helper does not shadow an authored commit function", (
|
||||
expect(() => new Function(targets.browser.replace(/^export\s+/gm, ""))).not.toThrow();
|
||||
expect(targets.browser).not.toContain("const commit = __wrnexusCommit");
|
||||
});
|
||||
|
||||
test("generated client modules stay below decoded-size and duplication ratchets", () => {
|
||||
const states = Array.from({ length: 12 }, (_, index) => `s${index}: number = ${index}`).join(" ");
|
||||
const functions = Array.from(
|
||||
{ length: 20 },
|
||||
(_, index) =>
|
||||
`client function f${index}(): void { s${index % 12} += 1 ${Array.from(
|
||||
{ length: 20 },
|
||||
(_unused, peer) => (peer === index ? "" : `if (false) f${peer}()`),
|
||||
).join(" ")} }`,
|
||||
).join("\n");
|
||||
const browser = generateTargets(
|
||||
parse(`component ClientSizeStress {
|
||||
state { ${states} }
|
||||
functions { ${functions} }
|
||||
view { <button></button> }
|
||||
}`),
|
||||
).browser;
|
||||
const decoded = new TextEncoder().encode(browser).length;
|
||||
const compressed = gzipSync(new TextEncoder().encode(browser)).length;
|
||||
|
||||
expect(decoded).toBeLessThanOrEqual(13_000);
|
||||
expect(decoded / compressed).toBeLessThanOrEqual(10);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user