// 调试脚本:对指定 BASE 做 cloud 接口顺序+并发耗时复测 // 用法:node dev_test_scripts/debug/debug_cloud_timing_probe.js [base_url] const BASE = process.argv[2] || 'http://localhost:8976' const main = async () => { const r1 = await fetch(BASE + '/go?systemId=Tools-cloud', { redirect: 'manual' }) const loc = r1.headers.get('location') if (!loc) throw new Error('no location, status=' + r1.status) await fetch(new URL(loc, BASE), { redirect: 'manual' }) const H = { Cookie: 'cloud_gate=1' } const t = async n => { const t0 = Date.now() const r = await fetch(BASE + n, { headers: H }) await r.text() return `${String(Date.now() - t0).padStart(5)}ms ${r.status} ${n}` } console.log('-- sequential --') for (const u of ['/api/cloud/operators', '/api/cloud/ecs', '/api/cloud/vas', '/api/cloud/renew', '/api/cloud/notes', '/api/cloud/balance_alerts/status']) { console.log(await t(u)) } console.log('-- burst --') const t0 = Date.now() const urls = ['/api/cloud/operators', '/api/cloud/ecs', '/api/cloud/vas', '/api/cloud/renew', '/api/cloud/notes', '/api/cloud/balance_alerts/status', '/api/flags'] const rs = await Promise.all(urls.map(u => fetch(BASE + u, { headers: H }).then(async r => { await r.text(); return `${String(Date.now() - t0).padStart(5)}ms ${r.status} ${u}` }))) rs.forEach(x => console.log(x)) console.log('burst total', Date.now() - t0, 'ms') } main().catch(e => { console.error('ERR', e.message); process.exit(1) })