Компонент Секундомер

Компонент Секундомер предоставляет способ профилировать код.

Установка

Вы можете установить компонент двумя разными способами:

Then, require the vendor/autoload.php file to enable the autoloading mechanism provided by Composer. Otherwise, your application won't be able to find the classes of this Symfony component.

Использование

Компонент Секундомер предоставляет простой и слаженный способ измерять время выполнения определённых частей кода, чтобы вы постоянно не анализировали микровремя самостоятельно. Вместо этого, используйте простой класс Stopwatch:

1
2
3
4
5
6
7
use Symfony\Component\Stopwatch\Stopwatch;

$stopwatch = new Stopwatch();
// Начните событие, названное 'eventName'
$stopwatch->start('eventName');
// ... здесь будет какой-то код
$event = $stopwatch->stop('eventName');

Объект StopwatchEvent можно извлечь из методов start(), stop(), lap() и getEvent(). Последний стоит использовать, когда вам нужно извлечь длительность события, пока оно ещё идёт.

Вы можете также предоставить имя категории события:

1
$stopwatch->start('eventName', 'categoryName');

Вы можете рассмотривать категории, как способ тегирования событий. Например, инструмент Профилировщик Symfony использует категории, чтобы красиво маркировать цветом разные события.

Периоды

Как вы знаете из настоящего мира, все секундомеры имеют две кнопки: одна для запуска и остановки секундомера, а вторая - для замера одного круга. Это именно то, что делает метод lap():

1
2
3
4
5
6
7
8
9
$stopwatch = new Stopwatch();
// Начать событие 'foo'
$stopwatch->start('foo');
// ... здесь будет какой-то код
$stopwatch->lap('foo');
// ... здесь будет какой-то код
$stopwatch->lap('foo');
// ... здесь будет какой-то код
$event = $stopwatch->stop('foo');

Информация о круге хранится в виде "периодов" в рамках события. Чтобы получить информацию о круге, вызовите:

1
$event->getPeriods();

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

1
2
3
4
5
6
7
$event->getCategory();   // Возвращает категорию, в которой было начато событие
$event->getOrigin();     // Возвращает время начала события в милисекундах
$event->ensureStopped(); // Останаливает все ещё не остановленные периоды
$event->getStartTime();  // Возвращает время начала самого первого периода
$event->getEndTime();    // Возвращает время конца самого последнего периода
$event->getDuration();   // Возвращает длительность события, включая все периоды
$event->getMemory();     // Возвращает максимальное использование памяти всех периодов

Разделы

Разделы - это способ логично разделить хронологию на группы. Вы можете увидеть, как Symfony использует разделы, чтобы красиво визуализировать жизненный цикл фреймворка в инструменте Профилировщик Symfony. Вот базовый пример использования разделов:

1
2
3
4
5
6
7
$stopwatch = new Stopwatch();

$stopwatch->openSection();
$stopwatch->start('parsing_config_file', 'filesystem_operations');
$stopwatch->stopSection('routing');

$events = $stopwatch->getSectionEvents('routing');

Вы можете повторно открыть закрытый раздел, вызывав метод openSection() и указав id раздела, который стоит открыть повторно:

1
2
3
$stopwatch->openSection('routing');
$stopwatch->start('building_config_tree');
$stopwatch->stopSection('routing');

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.