PHP Classes
elePHPant
Icontem

PHP Reboot Stop Watch: Record time PHP blocks take to execute

Recommend this page to a friend!
  Info   View files Example   View files View files (14)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2016-06-11 (4 months ago) RSS 2.0 feedNot enough user ratingsTotal: 147 This week: 1All time: 8,187 This week: 1,047Up
Version License PHP version Categories
phprebootstopwatch 1.0.5MIT/X Consortium ...5.3PHP 5, Time and Date, Performance and...
Description Author

This package can record time PHP blocks take to execute.

It can start measuring time at a given point of a script and stop at the end of the block that is being timed.

The class can also pause the timer to not count the paused time in the overall period that elapsed.

Picture of Kapil Sharma
  Performance   Level  
Name: Kapil Sharma <contact>
Classes: 1 package by
Country: India India

Details

phpreboot/stopwatch

Build Status HHVM Status Code Climate Test Coverage Software License Latest Version

SensioLabsInsight

Purpose

While optimizations, we need to check time taken by different operations. This soon becomes ugly, if we put many microtime code blocks.

Purpose of StopWatch is to provide neat way of recording time taken by different blocks.

Supported versions

Above build is tested code on PHP version 5.3, 5.4, 5.5, 5.6, 7.0 and HHVM. Check .travis.yml for details.

Examples

Examples are given in example folder. To quick view, below are few examples:

Simple stopwatch (file example/simplewatch.php)

Following example show use of StopWatch in simplest form.

<?php

/*
 * This example shows simple use of Stopwatch. For simple use, we need just four steps:
 *   - Create instance of StopWatch,
 *   - Call `start()` method to start the timer,
 *   - Call `stop()` method to stop the watch, and
 *   - Call `getTime()` method to get the time between start and stop.
 */

// Load Composer auto loader
require_once "../vendor/autoload.php";

use Phpreboot\Stopwatch\StopWatch;

// Create an instance of StopWatch
$stopWatch = new StopWatch();

// Start the watch to start timer,
$stopWatch->start();

$iteration = 0;

for ($i = 0; $i < 10000; $i++) {
    for ($j = 0; $j < 10000; $j++) {
        $iteration++;
    }
}

// Stop the watch.
$stopWatch->stop();

// By default, it will return time in seconds
$time = $stopWatch->getTime();

printf("Time taken for %d iterations was %f seconds.\n", $iteration, $time);

Pause demo (file example/pausedemo.php)

This example shows measuring time in multiple intervals. We simply pause watch to stop timer and start it again later. This step can be repeated multiple times.

<?php

/*
 * The example shows how to pause the timer for measuring time at different stages.
 * Once watch is started, we can call `pause` method to pause the watch.
 * If watch is paused, we can start it again to start timer. In that case, time will be added to timer.
 */

// Load Composer auto loader
require_once "../vendor/autoload.php";

use Phpreboot\Stopwatch\StopWatch;

// Create an instance of StopWatch
$stopWatch = new StopWatch();

$innerIterator = 0;

for ($i = 1; $i <= 10; $i++) {
    printf("Iteration %d starting.\n", $i);

    $stopWatch->start();
    for ($j = 0; $j < 1000; $j++) {
        $innerIterator++;
    }
    $stopWatch->pause();

    printf("Iteration %d watch stopped, not other task is starting..\n", $i);

    for ($k = 0; $k < 1000; $k++) {
        $timeWaster = $k;
    }
}

printf("Time taken by first loop (\$j), for %d iterations was: %f seconds.\n", $innerIterator, $stopWatch->getTime());

Multi demo (file example/multiDemo.php)

Measuring time in multiple intervals is useful but there are times when we need multiple stopwatches, independent of each others. Following example shows how can we have multiple stopwatches.

<?php

/*
 * This example shows using multiple stop watches in the same program.
 * If we want to use multiple watches, we must provide unique name all of them.
 * Steps involved are:
 *   - Add watches by any of following methods
 *     - Call `addWatch` multiple times, with name of watch as parameter, or
 *     - Call `addWatches` and pass an array of name of watches as parameter.
 *   - Further operation is same as in `simplewatch` and `pauseDemo` example. However this time, we need to pass
 *     watch name to all the methods.
 */

// Load Composer auto loader
require_once "../vendor/autoload.php";
use Phpreboot\Stopwatch\StopWatch;

// Create an instance of StopWatch
$stopWatch = new StopWatch();

// Initialize the watches.
$stopWatch->addWatches(["a", "b", "c"]);
// We could also use
// $stopWatch->addWatch("a");
// $stopWatch->addWatch("b");
// $stopWatch->addWatch("c");

$operatorA = 0;
$operatorB = 0;
$operatorC = 0;

for ($i = 1; $i <= 10; $i++) {
    // Following code block represent one operation, which needs to be measured.
    $stopWatch->start("a");
    for ($a = 0; $a < 10000; $a++) {
        $operatorA++;
    }
    $stopWatch->pause("a");

    // Following code block represent another operation, which needs to be measured separately.
    $stopWatch->start("b");
    for ($b = 0; $b < 10000; $b++) {
        $operatorB++;
    }
    $stopWatch->pause("b");

    // One more operation, independent of above operations needs to be measured.
    $stopWatch->start("c");
    for ($c = 0; $c < 10000; $c++) {
        $operatorC++;
    }
    $stopWatch->pause("c");
}

printf("Time taken in block 'a': %f seconds.\n", $stopWatch->getTime("a"));
printf("Time taken in block 'b': %f seconds.\n", $stopWatch->getTime("b"));
printf("Time taken in block 'c': %f seconds.\n", $stopWatch->getTime("c"));
  Files folder image Files  
File Role Description
Files folder imageexample (3 files)
Files folder imagesrc (1 directory)
Files folder imagetests (1 directory)
Accessible without login Plain text file .codeclimate.yml Data Auxiliary data
Accessible without login Plain text file changelog.md Data Auxiliary data
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file composer.lock Data Auxiliary data
Accessible without login Plain text file LICENSE Lic. License text
Accessible without login Plain text file phpunit.xml.dist Data Auxiliary data
Accessible without login Plain text file README.md Doc. Documentation

  Files folder image Files  /  example  
File Role Description
  Accessible without login Plain text file multiDemo.php Example Example script
  Accessible without login Plain text file pauseDemo.php Example Example script
  Accessible without login Plain text file simplewatch.php Example Example script

  Files folder image Files  /  src  
File Role Description
Files folder imagePhpreboot (1 directory)

  Files folder image Files  /  src  /  Phpreboot  
File Role Description
Files folder imageStopwatch (2 files)

  Files folder image Files  /  src  /  Phpreboot  /  Stopwatch  
File Role Description
  Plain text file StopWatch.php Class Class source
  Plain text file Timer.php Class Class source

  Files folder image Files  /  tests  
File Role Description
Files folder imagePhpreboot (1 directory)

  Files folder image Files  /  tests  /  Phpreboot  
File Role Description
Files folder imageStopwatch (2 files)

  Files folder image Files  /  tests  /  Phpreboot  /  Stopwatch  
File Role Description
  Accessible without login Plain text file StopWatchTest.php Test Unit test script
  Plain text file TimerTest.php Class Class source

 Version Control Unique User Downloads Download Rankings  
 100%
Total:147
This week:1
All time:8,187
This week:1,047Up