-
-
Save Viper007Bond/5192117 to your computer and use it in GitHub Desktop.
<?php | |
/** | |
* This little class records how long it takes each WordPress action or filter | |
* to execute which gives a good indicator of what hooks are being slow. | |
* You can then debug those hooks to see what hooked functions are causing problems. | |
* | |
* This class does NOT time the core WordPress code that is being run between hooks. | |
* You could use similar code to this that doesn't have an end processor to do that. | |
* | |
* @version 0.4 | |
* @author Alex Mills (Viper007Bond) | |
* | |
* This code is released under the same license as WordPress: | |
* http://wordpress.org/about/license/ | |
*/ | |
// Here's a test to make sure it's working | |
add_action( 'wp_footer', function() { sleep( 2 ); } ); | |
class WhatIsSoSlow { | |
public $data = array(); | |
function __construct() { | |
add_action( 'all', array( $this, 'filter_start' ) ); | |
add_action( 'shutdown', array( $this, 'results' ) ); | |
} | |
// This runs first for all actions and filters. | |
// It starts a timer for this hook. | |
public function filter_start() { | |
$current_filter = current_filter(); | |
$this->data[ $current_filter ][]['start'] = microtime( true ); | |
add_filter( $current_filter, array( $this, 'filter_end' ), 99999 ); | |
} | |
// This runs last (hopefully) for each hook and records the end time. | |
// This has problems if a hook fires inside of itself since it assumes | |
// the last entry in the data key for this hook is the matching pair. | |
public function filter_end( $filter_data ) { | |
$current_filter = current_filter(); | |
remove_filter( $current_filter, array( $this, 'filter_end' ), 99999 ); | |
end( $this->data[ $current_filter ] ); | |
$last_key = key( $this->data[ $current_filter ] ); | |
$this->data[ $current_filter ][ $last_key ]['stop'] = microtime( true ); | |
return $filter_data; | |
} | |
// Processes the results and var_dump()'s them. TODO: Debug bar panel? | |
public function results() { | |
$results = array(); | |
foreach ( $this->data as $filter => $calls ) { | |
foreach ( $calls as $call ) { | |
// Skip filters with no end point (i.e. the hook this function is hooked into) | |
if ( ! isset( $call['stop'] ) ) | |
continue; | |
if ( ! isset( $results[ $filter ] ) ) | |
$results[ $filter ] = 0; | |
$results[ $filter ] = $results[ $filter ] + ( $call['stop'] - $call['start'] ); | |
} | |
} | |
asort( $results, SORT_NUMERIC ); | |
$results = array_reverse( $results ); | |
var_dump( $results ); | |
} | |
} | |
new WhatIsSoSlow(); |
where do i put this or how do i get it to run within wordpress?
Hey guys!
I checked my hook, got this value = ["it24_hook"]=> float(2.0980834960938E-5)
2.0980834960938E-5 = 0.00002098083
Did this mean my hook take 0.02ms?
Thanks!
this gives an error:
Fatal error: Uncaught Error: Too few arguments to function ghosttown\WhatIsSoSlow::filter_end(), 0 passed in /var/www/vhosts/buyterpenesonline.com/wp-includes/class-wp-hook.php on line 287 and exactly 1 expected
First of all, thanks for sharing this script. Secondly, I want to know if this script works with every WordPress theme? Currently, I own a website about renting cars and I want to add this script to it. I have used WordPress car rental service theme and I want to know if this script is compatible with the best WordPress theme. I called it the best because I love how it works and how it looks. I strongly suggest it to everyone that wants to have a theme for their car dealership or renting service.
this gives an error:
Fatal error: Uncaught Error: Too few arguments to function ghosttown\WhatIsSoSlow::filter_end(), 0 passed in /var/www/vhosts/buyterpenesonline.com/wp-includes/class-wp-hook.php on line 287 and exactly 1 expected
Change line 44 to:
public function filter_end( $filter_data = null) {
Nice! Thanks for sharing ;)