PHP – Measure Scripts Execution Time and Page Generation Time
In many cases, it is really useful to know the exact time for how long a PHP script is running or how long will take PHP web page load. On the other hand it is also useful to know that how long a particular script operation or part of page load will take.
Following PHP Timing class is very simple to use, only create class and start timing and stop timing. Elapsed time function can be used also (elapsed time is calculated from script start time). Statistics can be displayed in print-functions and the same information without any formatting can also get with get-functions.
PHP Timing class
<?php class Timing { private $break; private $start_time; private $stop_time; // Constructor for Timing class public function __construct($break = "<br />") { $this->break = $break; // Set timezone date_default_timezone_set('UTC'); } // Set start time public function start() { $this->start_time = microtime(true); } // Set stop/end time public function stop() { $this->stop_time = microtime(true); } // Returns time elapsed from start public function getElapsedTime() { return $this->getExecutionTime(microtime(true)); } // Returns total execution time public function getTotalExecutionTime() { if (!$this->stop_time) { return false; } return $this->getExecutionTime($this->stop_time); } // Returns start time, stop time and total execution time public function getFullStats() { if (!$this->stop_time) { return false; } $stats = array(); $stats['start_time'] = $this->getDateTime($this->start_time); $stats['stop_time'] = $this->getDateTime($this->stop_time); $stats['total_execution_time'] = $this->getExecutionTime($this->stop_time); return $stats; } // Prints time elapsed from start public function printElapsedTime() { echo $this->break . $this->break; echo "Elapsed time: " . $this->getExecutionTime(microtime(true)); echo $this->break . $this->break; } // Prints total execution time public function printTotalExecutionTime() { if (!$this->stop_time) { return false; } echo $this->break . $this->break; echo "Total execution time: " . $this->getExecutionTime($this->stop_time); echo $this->break . $this->break; } // Prints start time, stop time and total execution time public function printFullStats() { if (!$this->stop_time) { return false; } echo $this->break . $this->break; echo "Script start date and time: " . $this->getDateTime($this->start_time); echo $this->break; echo "Script stop end date and time: " . $this->getDateTime($this->stop_time); echo $this->break . $this->break; echo "Total execution time: " . $this->getExecutionTime($this->stop_time); echo $this->break . $this->break; } // Format time to date and time private function getDateTime($time) { return date("Y-m-d H:i:s", $time); } // Get execution time by timestamp private function getExecutionTime($time) { return $time - $this->start_time; } } ?> |
PHP Timing class usage example 1
<?php // Create new Timing class with \n break $timing = new Timing("\n"); // Start timing $timing->start(); // Loop ten rounds and sleep one second per round for ($i=1;$i<=10;$i++) { echo $i . "\t"; sleep(1); // Print elapsed time every 2 rounds if ($i%2==0) { $timing->printElapsedTime(); } } // Stop/end timing $timing->stop(); // Print only total execution time $timing->printTotalExecutionTime(); // Print full stats $timing->printFullStats(); ?> |
Example output:
$ php timing_example1.php 1 2 Elapsed time: 2.0003080368042 3 4 Elapsed time: 4.0006020069122 5 6 Elapsed time: 6.0008690357208 7 8 Elapsed time: 8.0011501312256 9 10 Elapsed time: 10.001409053802 Total execution time: 10.001439094543 Script start date and time: 2010-01-08 13:19:17 Script stop end date and time: 2010-01-08 13:19:27 Total execution time: 10.001439094543 $
PHP Timing class usage example 2
<?php // Create new Timing class with \n break $timing = new Timing("\n"); // Start timing $timing->start(); $elapsed_times = array(); // Loop ten rounds and sleep one second per round for ($i=1;$i<=10;$i++) { echo $i . "\t"; sleep(1); // Get elapsed time every rounds $elapsed_times[$i] = $timing->getElapsedTime(); } echo "\n\n"; // Stop/end timing $timing->stop(); // Get full stats $times = $timing->getFullStats(); foreach ($elapsed_times as $key => $t) { $t2; if (isset($elapsed_times[$key-1])) { $t2 = $t - $elapsed_times[$key-1]; } else { $t2 = $t; } echo "Round: " . $key . " Time: " . $t2 . "\n"; } echo "Total execution time: " . $times['total_execution_time'] . "\n"; echo $times['start_time'] . " - " . $times['stop_time'] . "\n"; ?> |
Example output:
$ php timing_example2.php 1 2 3 4 5 6 7 8 9 10 Round: 1 Time: 1.0000989437103 Round: 2 Time: 1.0001330375671 Round: 3 Time: 1.000118970871 Round: 4 Time: 1.0001170635223 Round: 5 Time: 1.0001168251038 Round: 6 Time: 1.0001120567322 Round: 7 Time: 1.000118970871 Round: 8 Time: 1.0001220703125 Round: 9 Time: 1.0001239776611 Round: 10 Time: 1.0001330375671 Total execution time: 10.001236915588 2010-01-08 13:19:47 - 2010-01-08 13:19:57 $
In many cases, it is really useful to know the exact time for how long a PHP script is running or how long will take PHP web page load. On the other hand it is also useful to know that how long a particular script operation or part of page load will take.
Very helpful! Thanks for sharing JR.
Thanks for this script. Most of the ones I’ve found around the web arent accurate and showed results with huge time differences. This one rocks :)
Thanks.
Hi Bornie,
Thanks! Nice to hear that you like this script. :)
Thanks a lot for this! Works as advertised and is extremely easy to implement and use.
Cheers,
R