Замеряем время выполнения функций и отдельных участков кода в Drupal 7

Общая теория

При разработке модулей для Drupal и сайтов в целом одним из важнейших аспектов является время выполнения написанного нами кода.

Часто одну и туже задачу можно реализовать различными способами и конечно-же самый правильный из них - это самый быстрый (не во всех случаях, но в большинстве).

В Drupal имеются три удобных функции которые позволяют облегчить замер времени выполнения функции или отдельного участка кода.

Список эти функций:

  • timer_start($name) - запускает таймер с указанным именем
  • timer_read($name) - возвращает текущее значение таймера в миллисекундах (при этом не обязательно чтобы таймер был остановлен)
  • timer_stop($name) - останавливает таймер с указанным именем, возвращает массив содержащий: count - количество запусков и таймера, time - значение таймера в миллисекундах

При множественном запуске и остановке одного и того-же таймера время выполнения прибавляется к уже имеющемуся значению таймера.

Пример использования

Допустим мы написали два варианта одной функции complex_func_1 и complex_func_2 для того чтобы выяснить какая из них работает быстрее можно использовать следующий код:

// Замеряем за сколько выполнится complex_func_1 10 раз
timer_start('complex_func_1');
for ($i = 0; $i < 10; $i++) {
  complex_func_1();
}
timer_stop('complex_func_1');
 
// Замеряем за сколько выполнится complex_func_2 10 раз
timer_start('complex_func_2');
for ($i = 0; $i < 10; $i++) {
  complex_func_2();
}
timer_stop('complex_func_2');
 
// Выводим результат
dsm('Время выполнения complex_func_1: ' . timer_read('complex_func_1'));
dsm('Время выполнения complex_func_2: ' . timer_read('complex_func_2'));

Тестируем данный код с помощью devel:

Тестирование кода с функциями таймера с помощью devel

Как мы видим таймеры показывают правильный результат, первая функция выполнялась 10 секунд (10 раз по 1 секунде), а вторая 20 секунд.

Поделись с друзьями: