Performance.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const perf_hooks_1 = require("perf_hooks");
  4. function createPerformance() {
  5. let enabled = false;
  6. let timeOrigin;
  7. let marks;
  8. let measurements;
  9. function enable() {
  10. enabled = true;
  11. marks = new Map();
  12. measurements = new Map();
  13. timeOrigin = perf_hooks_1.performance.now();
  14. }
  15. function disable() {
  16. enabled = false;
  17. }
  18. function mark(name) {
  19. if (enabled) {
  20. marks.set(name, perf_hooks_1.performance.now());
  21. }
  22. }
  23. function measure(name, startMark, endMark) {
  24. if (enabled) {
  25. const start = (startMark && marks.get(startMark)) || timeOrigin;
  26. const end = (endMark && marks.get(endMark)) || perf_hooks_1.performance.now();
  27. measurements.set(name, (measurements.get(name) || 0) + (end - start));
  28. }
  29. }
  30. function markStart(name) {
  31. if (enabled) {
  32. mark(`${name} start`);
  33. }
  34. }
  35. function markEnd(name) {
  36. if (enabled) {
  37. mark(`${name} end`);
  38. measure(name, `${name} start`, `${name} end`);
  39. }
  40. }
  41. function formatName(name, width = 0) {
  42. return `${name}:`.padEnd(width);
  43. }
  44. function formatDuration(duration, width = 0) {
  45. return `${(duration / 1000).toFixed(2)} s`.padStart(width);
  46. }
  47. function print() {
  48. if (enabled) {
  49. let nameWidth = 0;
  50. let durationWidth = 0;
  51. measurements.forEach((duration, name) => {
  52. nameWidth = Math.max(nameWidth, formatName(name).length);
  53. durationWidth = Math.max(durationWidth, formatDuration(duration).length);
  54. });
  55. measurements.forEach((duration, name) => {
  56. console.log(`${formatName(name, nameWidth)} ${formatDuration(duration, durationWidth)}`);
  57. });
  58. }
  59. }
  60. return { enable, disable, mark, markStart, markEnd, measure, print };
  61. }
  62. exports.createPerformance = createPerformance;