Here's a decorator for timing functions
let timed = (f) => (...args)=>{
let start = performance.now();
let ret = f(...args);
console.log(`function ${f.name} took ${(performance.now()-start).toFixed(3)}ms`)
return ret;
}
Usage:
let test = ()=>{/*does something*/}
test = timed(test) // turns the function into a timed function in one line
test() // run your code as normal, logs 'function test took 1001.900ms'
If you're using async functions you can make timed
async and add an await
before f(...args), and that should work for those. It gets more complicated if you want one decorator to handle both sync and async functions.