* Tests basic request/response cycle performance
()
| 61 | * Tests basic request/response cycle performance |
| 62 | */ |
| 63 | function testRequestResponse () { |
| 64 | return new Promise(resolve => { |
| 65 | const iterations = 10000; |
| 66 | const server = createTestServer(); |
| 67 | |
| 68 | server.start(); |
| 69 | |
| 70 | // Wait for server to be listening before accessing address |
| 71 | server.server.on("listening", () => { |
| 72 | const port = server.server.address().port; // eslint-disable-line no-unused-vars |
| 73 | |
| 74 | console.log("\n📊 Basic Request/Response Performance"); |
| 75 | console.log("-".repeat(40)); |
| 76 | |
| 77 | const startTime = process.hrtime.bigint(); |
| 78 | let completed = 0; |
| 79 | |
| 80 | // Simple simulation of request processing |
| 81 | for (let i = 0; i < iterations; i++) { |
| 82 | // Simulate request object |
| 83 | const req = { |
| 84 | method: "GET", |
| 85 | url: "/test", |
| 86 | headers: { "accept": "text/plain" }, |
| 87 | parsed: new URL("http://localhost/test"), |
| 88 | server: server |
| 89 | }; |
| 90 | |
| 91 | // Simulate response object |
| 92 | const res = { |
| 93 | statusCode: 200, |
| 94 | headers: {}, |
| 95 | getHeader: name => res.headers[name], |
| 96 | removeHeader: name => delete res.headers[name], |
| 97 | header: (name, value) => res.headers[name] = value, // eslint-disable-line no-return-assign |
| 98 | getHeaders: () => res.headers |
| 99 | }; |
| 100 | |
| 101 | // Simulate response processing |
| 102 | const body = server.render(req, res, "Hello World"); // eslint-disable-line no-unused-vars |
| 103 | |
| 104 | if (++completed === iterations) { |
| 105 | const endTime = process.hrtime.bigint(); |
| 106 | const duration = Number(endTime - startTime) / 1e6; // Convert to ms |
| 107 | const rps = Math.round(iterations / duration * 1000); |
| 108 | |
| 109 | console.log(`Iterations: ${iterations.toLocaleString()}`); |
| 110 | console.log(`Duration: ${duration.toFixed(2)}ms`); |
| 111 | console.log(`Rate: ${rps.toLocaleString()} requests/second`); |
| 112 | console.log(`Avg: ${(duration / iterations).toFixed(4)}ms per request`); |
| 113 | |
| 114 | server.stop(); |
| 115 | resolve(); |
| 116 | } |
| 117 | } |
| 118 | }); |
| 119 | }); |
| 120 | } |