trace-runner.js 1022 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. const path = require('path');
  2. const { performance } = require('perf_hooks');
  3. /**
  4. * @template T
  5. * @param {string} prefix
  6. * @param {() => T} fn
  7. * @returns {T}
  8. */
  9. const traceSync = (prefix, fn) => {
  10. const start = performance.now();
  11. const result = fn();
  12. const end = performance.now();
  13. console.log(`${prefix}: ${(end - start).toFixed(3)}ms`);
  14. return result;
  15. };
  16. module.exports.traceSync = traceSync;
  17. /**
  18. * @template T
  19. * @param {string} prefix
  20. * @param {() => Promise<T>} fn
  21. * @returns {Promise<T>}
  22. */
  23. const traceAsync = async (prefix, fn) => {
  24. const start = performance.now();
  25. const result = await fn();
  26. const end = performance.now();
  27. console.log(`${prefix}: ${(end - start).toFixed(3)}ms`);
  28. return result;
  29. };
  30. module.exports.traceAsync = traceAsync;
  31. /**
  32. * @template T
  33. * @param {string} __filename
  34. * @param {() => Promise<T>} fn
  35. * @returns {T}
  36. */
  37. module.exports.runner = async (__filename, fn) => {
  38. return traceAsync(`⌛ [${path.basename(__filename, path.extname(__filename))}]`, fn);
  39. };