Класс Benchmarking (тестирование производительности)
CodeIgniter имеет класс Benchmarking, который постоянно активен, рассчитывая временные различия между любыми двумя отмеченными точками.
Примечание: Этот класс автоматически инициализируется системой, поэтому нет нужны загружать его вручную.
В дополнение, тесты производительности автоматически запускаются в тот момент, когда фреймворк стартует, и заканчиваются классом Output, прямо перед тем, как финализированное отображение отправляется в браузер, что позволяет очень аккуратно рассчитывать время выполнения, потребляемое всей системой.
Содержание
- Использование класса Benchmark
- Профилирование ваших точек тестирования
- Отображение полного времени выполнения
- Отображение потребления памяти
Использование класса Benchmark
Класс Benchmark может использоваться в ваших контроллерах, отображениях или в моделях. Процесс использования таков:
- Обозначить начальную точку
- Обозначить конечную точку
- Запустить функцию "elapsed time", чтобы увидеть результаты
Вот пример реального кода:
$this->benchmark->mark('code_start');
// тут видимо что-то случается
$this->benchmark->mark('code_end');
echo $this->benchmark->elapsed_time('code_start', 'code_end');
Примечание: Слова "code_start" и "code_end" произвольные. Это просто идентификаторы, обозначающие два маркера. Вы можете использовать любые слова, а также устанавливать множество маркеров. Вот пример:
$this->benchmark->mark('dog');
// здесь делаем что-то
$this->benchmark->mark('cat');
// здесь делаем еще чего-нибудь
$this->benchmark->mark('bird');
echo $this->benchmark->elapsed_time('dog', 'cat');
echo $this->benchmark->elapsed_time('cat', 'bird');
echo $this->benchmark->elapsed_time('dog', 'bird');
Профилирование ваших точек производительности
Если вы хотите, чтобы ваши данные тестирования производительности было доступны в профайлере, все точки маркеров должны устанавливаться парами, и каждая точка должна обозначаться с _start и _end. Каждая пара точек именуется идентично. Пример:
$this->benchmark->mark('my_mark_start');
// какой-то код...
$this->benchmark->mark('my_mark_end');
$this->benchmark->mark('another_mark_start');
// какие-то действия...
$this->benchmark->mark('another_mark_end');
Пожалуйста прочтите страницу профайлера для получения дополнительной информации.
Отображение общего времени выполнения
Если вы хотите выводить общее время выполнения с того момента, как запускается CodeIgniter до того момента, как данные отправляются в браузер, просто поместите приведенный ниже код в одно из ваших отображений:
<?php echo $this->benchmark->elapsed_time();?>
Обратите внимание, что это та же функция, которая использовалась для замеров выше, но вызванная без параметров. Когда параметры отсутствуют, CodeIgniter не останавливает измерение производительности до отправки финализированного вывода в браузер. Не важно, где вы используете эту функцию, таймер будет работать до самого конца.
Альтернативный способ показать время выполнения — использовать эту псевдопеременную:
{elapsed_time}
Примечание: Если вы хотите анализировать время выполнения ваших функций контроллеров, вы должны устанавливать собственные начальные и конечные метки.
Отображение потребления памяти
Если ваш PHP сконфигурирован с --enable-memory-limit, вы можете выводить количество памяти, потребленное целой системой, используя следующий код в отображениях:
<?php echo $this->benchmark->memory_usage();?>
Примечание: Эта функция может использоваться только в отображениях. Потребление будет отражать всю память, использованную приложением.
Альтернативный путь показать потребление памяти в отображениях — использовать псевдопеременную:
{memory_usage}