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