2022-01-17 16:53:50 -03:00

79 lines
2.2 KiB
JavaScript

const Axios = require('axios').default;
const express = require('express');
const { execSync } = require('child_process');
const interceptor = require('../../cjs');
const adapter = require('axios-cache-adapter');
const TIMES = 1_000_000;
const port = 8734;
const host = '0.0.0.0';
async function bench(axios) {
const init = Date.now();
let times = TIMES;
while (times--) {
await axios.get(`http://${host}:${port}/`);
}
return Date.now() - init;
}
function printResult(name, milliseconds, networkRequests, axiosTime) {
const seconds = milliseconds / 1000;
const axiosSeconds = axiosTime ? axiosTime / 1000 : seconds;
console.log();
console.log(`# ${name}`);
console.log(`Time: ${seconds}s`);
console.log(`Requests per second: ${(TIMES / seconds).toFixed(3)}/s`);
console.log(`Network requests: ${networkRequests} of ${TIMES}`);
console.log(
`Increase from pure axios: ${((100 * axiosSeconds) / seconds).toFixed(3)}%`
);
console.log();
}
(async () => {
const counter = { name: 'none' };
const app = express();
app.get('/', (_, res) => {
counter[counter.name] = counter[counter.name] + 1;
return res.json({ rnd: Math.random(), text: 'Hello World' });
});
const server = app.listen(port, host);
console.log(`Simulating ${TIMES} requests...`);
console.log(`Run at ${new Date().toUTCString()}`);
console.log(`Commit: ${execSync('git rev-parse HEAD').toString()}`);
counter.name = 'axios';
counter.axios = 0;
const withAxios = Axios.create();
const axiosTime = await bench(withAxios);
printResult('Raw axios', axiosTime, counter.axios);
counter.name = 'interceptor';
counter.interceptor = 0;
const withInterceptor = interceptor.setupCache(Axios.create(), { ttl: 1000 });
const interceptorTime = await bench(withInterceptor);
printResult('Axios Cache Interceptor', interceptorTime, counter.interceptor, axiosTime);
counter.name = 'adapter';
counter.adapter = 0;
const withAdapter = adapter.setup({
cache: { maxAge: 1000 }
});
const adapterTime = await bench(withAdapter);
printResult('Axios Cache Adapter', adapterTime, counter.adapter, axiosTime);
server.close();
})().catch(console.error);