Johnny
13.10.2009 - 23:58
Класс юзаю для измерения производительности скриптов.
PHP |
<?php
/** * Класс Таймер * позволяет запускать и останавливать как * именованные интервалы, так и нет. * * Пример использования: * Timer::start('one'); * sleep(1); * Timer::start('two'); * sleep(1); * Timer::stop(); * Timer::stop(); * * Выведет: * two — 1 сек * one — 2 сек * т.е. ф-я stop вызванная без параметров останавливает таймеры * в обратном запуску порядке * * Но можно остановить таймер и по имени: * ... * Timer::stop('one'); * Timer::stop('two'); * Выведет: * one — 2 сек * two — 1 сек * * Второй параметр ф-и stop * в случае true выводит результат ввиде массива * array( 'name'=>имя таймера, 'value'=>значение ) * */ class Timer {
private static $__timers = array();
static public function start( $name = null ) { if( $name ) { self::$__timers[$name]['start_time'] = microtime( true ); } else { self::$__timers[]['start_time'] = microtime( true ); } }
static public function stop( $name = null, $show_result = true ) { if( $name === null ) { $name = array_pop( array_keys(self::$__timers) ); } if( self::__check_key($name) ) { self::$__timers[$name]['end_time'] = microtime( true ); self::__calc_difference( $name ); if( $show_result ) { echo self::__show_result( $name ); } else { return self::__show_result($name, true); } self::__unset( $name ); } }
static public function result() { return self::__show_result(); }
private static function __show_result( $name, $as_array = false ) { $value = round( self::$__timers[$name]['difference'] , 3 ); if( !$as_array ) { return "{$name} — " . $value . " сек"; } else { return array( 'name'=>$name, 'value'=>$value ); } }
static private function __unset( $name ) { unset( self::$__timers[$name] ); }
static private function __calc_difference( $name ) { self::$__timers[$name]['difference'] = self::$__timers[$name]['end_time'] - self::$__timers[$name]['start_time']; }
static private function __check_key( $name ) { return array_key_exists($name, self::$__timers); }
}
|
_____________