Много раз мы сталкиваемся с ситуацией, когда нам нужно следить за временем выполнения функций или кода, который мы пишем. Будь то API, который медленно отвечает, или любая функция, выполнение которой занимает больше времени.

В этой статье мы увидим, как мы можем отслеживать время, затрачиваемое функцией или даже строкой кода, используя встроенный модуль производительности JavaScript.
Если вы используете TypeScript, этот же модуль можно использовать и там.
Если вы используете объектно-ориентированный подход в TypeScript, в конце у меня есть для вас бонусный совет.

Начнем с файла JavaScript.

Вот вывод кода:

Что мы уже видели?

  1. Модуль производительности запускает таймер, как только начинается выполнение приложения.
  2. В любой момент времени мы можем узнать время, прошедшее с момента выполнения, с помощью функции performance.now().
  3. Чтобы рассчитать время выполнения для конкретной функции, мы можем сохранить прошедшее время до и после выполнения. В конце вычтите время окончания из времени начала, чтобы получить время выполнения нужных строк кода.

Теперь давайте посмотрим, как это работает, когда мы используем его с TypeScript.

Вот вывод приведенного выше кода.

Мы видим, что модуль производительности работает так же, как и для JavaScript.

Бонус: сократите количество строк кода с помощью декораторов

Если у вас также есть код TypeScript, написанный в объектно-ориентированном формате, как у меня, это может быть вам полезно.

Мы можем просто создать функцию-декоратор и поместить вызов прямо над определением функции. Таким образом, декоратор всегда будет вызываться при вызове исходной функции, и мы можем каждый раз устранять строки расчета времени.

Позвольте мне показать вам пример.

Это класс, в котором есть все функции (главный файл приложения).

Это функция декоратора

Вот результат

Что мы здесь увидели?

Вычисления времени перенесены в функцию profilerDecorator в файл profilerDecorator.ts.

  1. Вызов profilerDecorator добавляется к нужной функции с помощью инструкции «@profilerDecorator» непосредственно над функцией.
  2. Закомментированные операторы в основном файле теперь удалены. Тем самым сократив количество строк кода.
  3. Добавление профилировщика к функции стало проще. Просто добавьте «@profilerDecorator» над определением функции.

Небольшая настройка для запуска декораторов в TypeScript

  1. Измените файл tsconfig.json таким образом, чтобы присутствовал параметр «experimentalDecorators»:true. Я прикрепил правильный файл tsconfig.json в конце этого раздела.
  2. Декораторы не работают со стрелочными функциями. Нам нужно использовать обычные функции внутри класса для работы декораторов.

Ниже приведен файл tsconfig.json для справки.

Профилирование — один из важнейших аспектов программирования. Я надеюсь, что это полезно и быстрый способ отладки производительности.

Пожалуйста, хлопните в ладоши, если вам это понравилось. Также, пожалуйста, добавляйте свои отзывы в комментариях.

Спасибо и удачной отладки!