SPB Git
1.3 KB · 9 lines typescript
1/** P50/P95 latency baseline for key pages/APIs against a running instance (sequential, warm). Usage: tsx scripts/latency-baseline.ts [base] [n] */2const base = (process.argv[2] ?? process.env.E2E_BASE_URL ?? "http://127.0.0.1:8540").replace(/\/$/, ""); const n = Number(process.argv[3] ?? 20);3const targets = ["/", "/tools", "/tools?q=vector%20database", "/tools?category=ai&source=open-source", "/tools/duckdb", "/categories/analytics-engines", "/collections/apple-silicon-ai", "/compare?tools=duckdb,postgresql,sqlite", "/api/suggest?q=post", "/api/health", "/sitemap.xml"];4const q = (a: number[], p: number) => a.slice().sort((x, y) => x - y)[Math.min(a.length - 1, Math.floor(p * a.length))];5const out: Record<string, { p50: number; p95: number; bytes: number; status: number }> = {};6for (const t of targets) { const times: number[] = []; let bytes = 0, status = 0; await fetch(base + t); for (let i = 0; i < n; i++) { const t0 = performance.now(); const r = await fetch(base + t); const b = await r.arrayBuffer(); times.push(performance.now() - t0); bytes = b.byteLength; status = r.status; } out[t] = { p50: Math.round(q(times, 0.5)), p95: Math.round(q(times, 0.95)), bytes, status }; }7console.table(out); console.log(JSON.stringify({ base, n, at: new Date().toISOString(), out }));8export {};9
Files · d0878ed8ec6f375df09d3e415bf35d941ff62d79
Menu

Theme