Console - timing

by Julien Roche

HTML

<h1>Open your Dev console</h1>

Babel + JSX

function timing(target, key, descriptor) {
  const myMethod = descriptor.value;
  
  descriptor.value = function (...arg) {
  console.time(myMethod.name);
    const returned = myMethod.apply(this, arg);
    
    if (returned instanceof Promise) {
    	return returned.then((result) => {
        console.timeEnd(myMethod.name);
      	return result;
      });
    }
    
    console.timeEnd(myMethod.name);
    return returned;
  };
	return descriptor;
}

class MyClass {
  @timing
  myAwesomeFunction() {
    const randomColor = Math.floor(Math.random()*16777215).toString(16);
    console.info('%cNo really awesome...', `color:#${randomColor};`);
  }
  
  @timing
  myAsyncFunction() {
  	return new Promise((resolve) => {
    	setTimeout(() => {
     	 this.myAwesomeFunction();
       resolve();
      }, 150);
    });
  }
}

(async function() {
  const instance = new MyClass();
  instance.myAwesomeFunction();
  await instance.myAsyncFunction();
})();