perf: optimize persist delta gating and diagnostics

This commit is contained in:
Youzini-afk
2026-04-13 16:11:22 +08:00
parent 8f7572b615
commit b16785e56f
30 changed files with 4495 additions and 47 deletions

View File

@@ -0,0 +1,76 @@
import assert from "node:assert/strict";
import { solveLayoutWithJs } from "../ui/graph-layout-solver.js";
const payload = {
nodes: [
{
x: 20,
y: 20,
vx: 0,
vy: 0,
pinned: false,
radius: 8,
regionKey: "objective",
regionRect: { x: 0, y: 0, w: 200, h: 160 },
},
{
x: 80,
y: 30,
vx: 0,
vy: 0,
pinned: false,
radius: 9,
regionKey: "objective",
regionRect: { x: 0, y: 0, w: 200, h: 160 },
},
{
x: 100,
y: 80,
vx: 0,
vy: 0,
pinned: true,
radius: 10,
regionKey: "objective",
regionRect: { x: 0, y: 0, w: 200, h: 160 },
},
],
edges: [
{ from: 0, to: 1, strength: 0.8 },
{ from: 1, to: 2, strength: 0.6 },
],
config: {
iterations: 32,
repulsion: 2200,
springK: 0.05,
damping: 0.87,
centerGravity: 0.02,
minGap: 10,
speedCap: 3,
},
};
const resultA = solveLayoutWithJs(payload);
assert.equal(resultA.ok, true);
assert.ok(resultA.positions instanceof Float32Array);
assert.equal(resultA.positions.length, payload.nodes.length * 2);
assert.equal(resultA.diagnostics.solver, "js-worker");
assert.equal(resultA.diagnostics.nodeCount, 3);
const resultB = solveLayoutWithJs(payload);
assert.deepEqual(Array.from(resultA.positions), Array.from(resultB.positions));
for (let index = 0; index < payload.nodes.length; index++) {
const x = resultA.positions[index * 2];
const y = resultA.positions[index * 2 + 1];
assert.ok(Number.isFinite(x));
assert.ok(Number.isFinite(y));
assert.ok(x >= 0 && x <= 200);
assert.ok(y >= 0 && y <= 160);
}
const emptyResult = solveLayoutWithJs({ nodes: [], edges: [] });
assert.equal(emptyResult.ok, true);
assert.equal(emptyResult.positions.length, 0);
console.log("graph-layout-solver tests passed");