Skip to content

Instantly share code, notes, and snippets.

@marcus-at-localhost
Created August 28, 2014 10:23
Show Gist options
  • Save marcus-at-localhost/77574d78d746af2323cc to your computer and use it in GitHub Desktop.
Save marcus-at-localhost/77574d78d746af2323cc to your computer and use it in GitHub Desktop.
jsperf.com like script to benchmark php functions
<?php
// jsperf.com like script to benchmark php functions.
// http://baylorrae.com/blog/2012/01/09/benchmarking-php-script-speeds/
// a place to store the result of each test
$results = array();
// my version of un-camel casing a word
function test_1() {
return strtolower(implode(' ', preg_split('/(?<=\\w)([A-Z])/', 'aCamelCasedWord')));
}
// CakePHP's version of un-camel casing a word
function test_2() {
return strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', 'aCamelCasedWord'));
}
/**
* @param title
* @param function/test
* @param allowed time to run
*/
$results[] = Benchmark::run_test('My Version', 'test_1', 10);
$results[] = Benchmark::run_test('Cake\'s Version', 'test_2', 10);
foreach( $results as $result )
echo $result;
///
class Benchmark {
/**
* Creates a loop that lasts for $allowed_time and logs how many
* times a function was able to run
*
* @param string $name the name of the test
* @param function $test the function to run
* @param integer $allowed_time seconds to run a function
* @return string
* @author Baylor Rae'
*/
public static function run_test($name, $test, $allowed_time = 10) {
// get the time the function was called
$start_time = microtime(true);
// stores how many times $test was able to run
$times_run = 0;
// don't allow output
ob_start();
// run the $test function until time is up
do {
call_user_func($test);
$times_run++;
}while( number_format(microtime(true) - $start_time, 0) < $allowed_time);
// end output buffering
ob_end_clean();
// return the formatted results
return self::results($name, $times_run, $allowed_time);
}
/**
* Formats results for easy reading
*
* @param string $name name of the test
* @param integer $times_run number of times the test ran
* @param integer $allowed_time how long the test was allowed to run
* @return string
* @author Baylor Rae'
*/
private static function results($name, $times_run, $allowed_time) {
$output = '<h2>Results for ' . $name . '</h2>';
$output .= '<dl>';
$output .= '<dt>Times Run</dt>';
$output .= '<dd>' . number_format($times_run, 0) . '</dd>';
$output .= '<dt>Ran For</dt>';
$output .= '<dd>' . $allowed_time . 's</dd>';
$output .= '</dl>';
return $output;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment