// 简易性能基准 — 对应 T-1.8 性能验收。 // 用法:先启动 API(node dist/main.js),再 `node bench.mjs` const BASE = process.env.BENCH_BASE || 'http://127.0.0.1:3001'; const N = Number(process.env.BENCH_N || 200); function pct(arr, p) { const s = [...arr].sort((a, b) => a - b); return s[Math.min(s.length - 1, Math.floor((p / 100) * s.length))]; } async function bench(name, path, threshold) { const lat = []; // 预热 for (let i = 0; i < 5; i++) await fetch(`${BASE}${path}`); for (let i = 0; i < N; i++) { const t = performance.now(); const res = await fetch(`${BASE}${path}`); await res.text(); lat.push(performance.now() - t); } const p50 = pct(lat, 50); const p95 = pct(lat, 95); const ok = p95 < threshold; console.log( `${ok ? '✓' : '✗'} ${name.padEnd(16)} p50=${p50.toFixed(1)}ms ` + `p95=${p95.toFixed(1)}ms (阈值 ${threshold}ms)`, ); return ok; } const results = []; results.push(await bench('list', '/api/models?pageSize=24', 1500)); results.push(await bench('list+filter', '/api/models?category=动车组&sort=max_speed_value&order=desc', 1500)); results.push(await bench('detail', '/api/models/1', 1500)); results.push(await bench('search', '/api/search?q=HXD', 500)); const allOk = results.every(Boolean); console.log(`\n基准结果:${allOk ? '全部达标 ✓' : '存在未达标项 ✗'}(每项 ${N} 次请求)`); process.exit(allOk ? 0 : 1);