Метод getSectionEvents класса Stopwatch
Метод getSectionEvents класса Stopwatch
возвращает массив событий, которые были
записаны в указанной секции. Первым параметром
передаётся имя секции, события которой нужно
получить. Если секция не открывалась или не
существует, метод выбросит исключение
InvalidArgumentException.
Метод удобно использовать для анализа производительности: после остановки секундомера можно получить все события секции и вывести их длительность.
Синтаксис
public function getSectionEvents(string $id): array
Пример
Давайте запустим секундомер, откроем секцию
'abcde', выполним несколько событий и
получим все события этой секции:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Stopwatch\Stopwatch;
class ArticleController extends AbstractController
{
public function index(): Response
{
$stopwatch = new Stopwatch();
$stopwatch->openSection();
$stopwatch->start('event1', 'abcde');
$stopwatch->stop('event1');
$stopwatch->start('event2', 'abcde');
$stopwatch->stop('event2');
$stopwatch->stopSection('abcde');
$events = $stopwatch->getSectionEvents('abcde');
foreach ($events as $name => $event) {
echo $name . ': ' . $event->getDuration() . ' ms' . PHP_EOL;
}
return new Response('done');
}
}
?>
Результат выполнения кода:
event1: 0 ms
event2: 0 ms
Пример
Давайте получим события секции по умолчанию,
которая называется '__root__':
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Stopwatch\Stopwatch;
class ArticleController extends AbstractController
{
public function index(): Response
{
$stopwatch = new Stopwatch();
$stopwatch->start('article');
$stopwatch->stop('article');
$events = $stopwatch->getSectionEvents('__root__');
$res = array_keys($events);
return new Response(implode(', ', $res));
}
}
?>
Результат выполнения кода:
"article"
Пример
Давайте попробуем получить события
несуществующей секции 'user':
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Stopwatch\Stopwatch;
class ArticleController extends AbstractController
{
public function index(): Response
{
$stopwatch = new Stopwatch();
try {
$events = $stopwatch->getSectionEvents('user');
} catch (\InvalidArgumentException $e) {
return new Response($e->getMessage());
}
return new Response('ok');
}
}
?>
Результат выполнения кода:
"Section \"user\" is not started."
Смотрите также
-
класс
Stopwatch,
который измеряет время выполнения кода -
метод
openSection,
который открывает новую секцию -
метод
stopSection,
который останавливает секцию -
метод
getEvent,
который возвращает конкретное событие