РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1068 of 1361 menu

Класс Stopwatch

Класс Stopwatch служит для профилирования и измерения времени выполнения кода. Он позволяет запускать таймеры, останавливать их, создавать промежуточные отметки и группировать замеры в именованные секции. Первым параметром методы start и stop принимают имя события, вторым - имя секции.

Синтаксис

<?php use Symfony\Component\Stopwatch\Stopwatch; $stopwatch = new Stopwatch(); $stopwatch->start(string $name, ?string $category = null); $stopwatch->stop(string $name); $stopwatch->lap(string $name); $stopwatch->isStarted(string $name); $stopwatch->getEvent(string $name); $stopwatch->getSectionEvents(string $category); $stopwatch->openSection(); $stopwatch->stopSection(string $id); ?>

Пример

Давайте создадим секундомер и измерим время выполнения участка кода:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Stopwatch\Stopwatch; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(): Response { $stopwatch = new Stopwatch(); $stopwatch->start('article'); $res = []; for ($i = 0; $i < 5; $i++) { $res[] = $i; } $event = $stopwatch->stop('article'); return new Response( (string) $event->getDuration() ); } } ?>

Результат выполнения кода:

0

Пример

Давайте создадим секцию и разместим в ней несколько замеров:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Stopwatch\Stopwatch; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(): Response { $stopwatch = new Stopwatch(); $stopwatch->openSection(); $stopwatch->start('first'); $stopwatch->stop('first'); $stopwatch->start('second'); $stopwatch->stop('second'); $stopwatch->stopSection('article'); $events = $stopwatch->getSectionEvents('article'); return new Response( implode(',', array_keys($events)) ); } } ?>

Результат выполнения кода:

"__section__,first,second"

Пример

Давайте используем метод lap для промежуточной отметки внутри одного замера:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Stopwatch\Stopwatch; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(): Response { $stopwatch = new Stopwatch(); $stopwatch->start('article'); $stopwatch->lap('article'); $event = $stopwatch->stop('article'); $periods = $event->getPeriods(); return new Response( (string) count($periods) ); } } ?>

Результат выполнения кода:

1

Пример

Давайте проверим, запущен ли замер, с помощью метода isStarted:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Stopwatch\Stopwatch; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(): Response { $stopwatch = new Stopwatch(); $stopwatch->start('article'); $res = $stopwatch->isStarted('article'); $stopwatch->stop('article'); return new Response( $res ? 'true' : 'false' ); } } ?>

Результат выполнения кода:

"true"

Смотрите также

  • метод start,
    который запускает замер времени
  • метод stop,
    который останавливает замер времени
  • метод lap,
    который создаёт промежуточную отметку
  • метод getEvent,
    который возвращает событие замера
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить