test(bench): add parallel benchmarks for HTTP kernel
- Introduce parallel benchmarks for simple and complex HTTP requests - Improve performance testing with higher concurrency (10,000 requests) - Comment out single-request benchmarks for future reference
This commit is contained in:
87
src/__bench__/HttpKernel.bench.ts
Normal file
87
src/__bench__/HttpKernel.bench.ts
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
import type { IRouteDefinition } from '../Interfaces/mod.ts';
|
||||||
|
import { HttpKernel } from '../mod.ts';
|
||||||
|
|
||||||
|
const CONCURRENT_REQUESTS = 10000;
|
||||||
|
|
||||||
|
// Deno.bench('Simple request', async (b) => {
|
||||||
|
// const kernel = new HttpKernel();
|
||||||
|
|
||||||
|
// const def: IRouteDefinition = { method: 'GET', path: '/hello' };
|
||||||
|
// kernel.route(def).handle((_ctx) => {
|
||||||
|
// return Promise.resolve(new Response('OK', { status: 200 }));
|
||||||
|
// });
|
||||||
|
// b.start();
|
||||||
|
// await kernel.handle(
|
||||||
|
// new Request('http://localhost/hello', { method: 'GET' }),
|
||||||
|
// );
|
||||||
|
// b.end();
|
||||||
|
// });
|
||||||
|
|
||||||
|
Deno.bench('Simple request (parallel)', async (b) => {
|
||||||
|
const kernel = new HttpKernel();
|
||||||
|
|
||||||
|
const def: IRouteDefinition = { method: 'GET', path: '/hello' };
|
||||||
|
kernel.route(def).handle((_ctx) => {
|
||||||
|
return Promise.resolve(new Response('OK', { status: 200 }));
|
||||||
|
});
|
||||||
|
|
||||||
|
const requests = Array.from(
|
||||||
|
{ length: CONCURRENT_REQUESTS },
|
||||||
|
() =>
|
||||||
|
kernel.handle(
|
||||||
|
new Request('http://localhost/hello', { method: 'GET' }),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
b.start();
|
||||||
|
await Promise.all(requests);
|
||||||
|
b.end();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Deno.bench('Complex request', async (b) => {
|
||||||
|
// const kernel = new HttpKernel();
|
||||||
|
|
||||||
|
// kernel.route({ method: 'GET', path: '/test' })
|
||||||
|
// .middleware(async (_ctx, next) => {
|
||||||
|
// return await next();
|
||||||
|
// })
|
||||||
|
// .middleware(async (_ctx, next) => {
|
||||||
|
// return await next();
|
||||||
|
// })
|
||||||
|
// .handle((_ctx) => {
|
||||||
|
// return Promise.resolve(new Response('done'));
|
||||||
|
// });
|
||||||
|
|
||||||
|
// b.start();
|
||||||
|
// await kernel.handle(
|
||||||
|
// new Request('http://localhost/test', { method: 'GET' }),
|
||||||
|
// );
|
||||||
|
// b.end();
|
||||||
|
// });
|
||||||
|
|
||||||
|
Deno.bench('Complex request (parallel)', async (b) => {
|
||||||
|
const kernel = new HttpKernel();
|
||||||
|
|
||||||
|
kernel.route({ method: 'GET', path: '/test' })
|
||||||
|
.middleware(async (_ctx, next) => {
|
||||||
|
return await next();
|
||||||
|
})
|
||||||
|
.middleware(async (_ctx, next) => {
|
||||||
|
return await next();
|
||||||
|
})
|
||||||
|
.handle((_ctx) => {
|
||||||
|
return Promise.resolve(new Response('done'));
|
||||||
|
});
|
||||||
|
|
||||||
|
const requests = Array.from(
|
||||||
|
{ length: CONCURRENT_REQUESTS },
|
||||||
|
() =>
|
||||||
|
kernel.handle(
|
||||||
|
new Request('http://localhost/test', { method: 'GET' }),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
b.start();
|
||||||
|
await Promise.all(requests);
|
||||||
|
b.end();
|
||||||
|
});
|
Reference in New Issue
Block a user