A thin wrapper around the Node.js Performance API to transparently measure the execution time of asynchronous functions.
Using yarn
:
yarn add @twuni/measured
Using npm
:
npm install @twuni/measured
First, import the module:
// Using ES6 modules:
import { measured } from '@twuni/measured';
// ...or, if you are using CommonJS modules:
const { measured } = require('@twuni/measured');
Then, you can use the measured()
function like this:
If this is what your code looked like before:
await doExpensiveThing();
To measure that, just change it to read something like this:
await measured(doExpensiveThing, {
onComplete: ({ duration }) => {
console.debug(`Completed in ${duration}ms`);
},
onReject: ({ duration }) => {
console.debug(`Rejected in ${duration}ms`);
},
onResolve: ({ duration }) => {
console.debug(`Resolved in ${duration}ms`);
}
})();
Each of these callbacks is optional and is described as follows:
-
The
#onComplete()
function will run whether the wrapped behavior resolves or rejects. -
The
#onResolve()
function will run only when the wrapped behavior resolves. -
The
#onReject()
function will run only when the wrapped behavior rejects.
const express = require('express');
const app = express();
app.use((request, response, next) => measured(next, {
onComplete: ({ duration }) => {
console.log(`${request.method} ${request.path} served in ${duration}ms`);
}
})());