El componente Stopwatch

El componente Stopwatch proporciona una manera para codificar el perfil.

Nuevo en la versión 2.2: El componente Stopwatch es nuevo en Symfony 2.2. Anteriormente, la clase Stopwatch estaba localizada en el componente HttpKernel (y era nueva en 2.1).

Instalando

Puedes instalar el componente en dos diferentes maneras:

Usando

El el componente stopwatch proporciona una manera fácil y coherente para medir el tiempo de ejecución de ciertas partes de código a modo de que no tengas que analizar la duración de algo. En cambio, usas la sencilla clase Symfony\Component\Stopwatch\Stopwatch:

use Symfony\Component\Stopwatch\Stopwatch;

$stopwatch = new Stopwatch();
// Inicia el evento llamado 'eventName'
$stopwatch->start('eventName');
// ... aquí va algún código
$event = $stopwatch->stop('eventName');

También puedes proporcionar un nombre de categoría a un evento:

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

Puedes considerar a las categorías como una conveniente manera de etiquetar eventos. Por ejemplo, la herramienta del perfilador de Symfony usa categorías para codificar coloridamente diferentes eventos.

Periodos

Como sabes del mundo real, todos los cronómetros vienen con dos botones. Uno para arrancar y detener el cronómetro, otro para medir el tiempo transcurrido. Esto exactamente es lo que hace el método lap():

$stopwatch = new Stopwatch();
// Inicia el evento llamado 'foo'
$stopwatch->start('foo');
// ... aquí va algún código
$stopwatch->lap('foo');
// ... aquí va algún código
$stopwatch->lap('foo');
// ... aquí va algún otro código
$event = $stopwatch->stop('foo');

La información del lapso se almacena como «periodos» en el evento. Para obtener dicha información llama a:

$event->getPeriods();

Además de obtener los periodos, puedes conseguir otra útil información del objeto evento. Por ejemplo:

$event->getCategory();      // Devuelve la categoría en que se inició el evenento
$event->getOrigin();        // Devuelve el lapso transcurrido desde que se inicio
// el evento en milisegundos
$event->ensureStopped();    // Detiene todos los periodos que no se han detenido ya
$event->getStartTime();     // Regresa el inicio del primer periodo
$event->getEndTime();       // Regresa el tiempo final del último periodo
$event->getDuration();      // Obtiene la duración del evento incluyendo todos los
// periodos
$event->getMemory();        // Devuelve el máximo uso de memoria de todos los periodos

Secciones

Las secciones son una manera de dividir lógicamente la cronología en grupos. Puedes ver cómo usa Symfony las secciones visualizando agradablemente el ciclo de vida con la herramienta perfiladora de Symfony. Aquí tienes un ejemplo del uso básico de las secciones:

$stopwatch = new Stopwatch();

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

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

You can reopen a closed section by calling the openSection`() method and specifying the id of the section to be reopened:

$stopwatch->openSection('routing');
$stopwatch->start('building_config_tree');
$stopwatch->stopSection('routing');
Bifúrcame en GitHub