mageno核心类-Varien_Profiler

来源:互联网 发布:莞城金域名苑 编辑:程序博客网 时间:2024/05/18 19:37

Varien_Profiler类是magento用来监测程序执行时间和内存使用情况的类

这个类的使用非常简单,所有方法都是static,要看具体怎么使用,请参考另一篇博文:http://blog.csdn.net/clh604/article/details/8541211

Varien_Profiler::start('self::app::init');  self::$_app->init($code, $type, $options);//初始化APPVarien_Profiler::stop('self::app::init');


类的源码:/lib/Varien/Profiler.php

class Varien_Profiler{    /**     * Timers for code profiling     *     * @var array     */    static private $_timers = array();    static private $_enabled = false;    static private $_memory_get_usage = false;    public static function enable()    {        self::$_enabled = true;        self::$_memory_get_usage = function_exists('memory_get_usage');    }    public static function disable()    {        self::$_enabled = false;    }    public static function reset($timerName)    {        self::$_timers[$timerName] = array(        'start'=>false,        'count'=>0,        'sum'=>0,        'realmem'=>0,        'emalloc'=>0,        );    }    public static function resume($timerName)    {        if (!self::$_enabled) {            return;        }        if (empty(self::$_timers[$timerName])) {            self::reset($timerName);        }        if (self::$_memory_get_usage) {        self::$_timers[$timerName]['realmem_start'] = memory_get_usage(true);        self::$_timers[$timerName]['emalloc_start'] = memory_get_usage();        }        self::$_timers[$timerName]['start'] = microtime(true);        self::$_timers[$timerName]['count'] ++;    }    public static function start($timerName)    {        self::resume($timerName);    }    public static function pause($timerName)    {        if (!self::$_enabled) {            return;        }        $time = microtime(true); // Get current time as quick as possible to make more accurate calculations        if (empty(self::$_timers[$timerName])) {            self::reset($timerName);        }        if (false!==self::$_timers[$timerName]['start']) {            self::$_timers[$timerName]['sum'] += $time-self::$_timers[$timerName]['start'];            self::$_timers[$timerName]['start'] = false;            if (self::$_memory_get_usage) {            self::$_timers[$timerName]['realmem'] += memory_get_usage(true)-self::$_timers[$timerName]['realmem_start'];            self::$_timers[$timerName]['emalloc'] += memory_get_usage()-self::$_timers[$timerName]['emalloc_start'];            }        }    }    public static function stop($timerName)    {        self::pause($timerName);    }    public static function fetch($timerName, $key='sum')    {        if (empty(self::$_timers[$timerName])) {            return false;        } elseif (empty($key)) {            return self::$_timers[$timerName];        }        switch ($key) {            case 'sum':                $sum = self::$_timers[$timerName]['sum'];                if (self::$_timers[$timerName]['start']!==false) {                    $sum += microtime(true)-self::$_timers[$timerName]['start'];                }                return $sum;            case 'count':                $count = self::$_timers[$timerName]['count'];                return $count;            case 'realmem':            if (!isset(self::$_timers[$timerName]['realmem'])) {            self::$_timers[$timerName]['realmem'] = -1;            }            return self::$_timers[$timerName]['realmem'];            case 'emalloc':            if (!isset(self::$_timers[$timerName]['emalloc'])) {            self::$_timers[$timerName]['emalloc'] = -1;            }            return self::$_timers[$timerName]['emalloc'];            default:                if (!empty(self::$_timers[$timerName][$key])) {                    return self::$_timers[$timerName][$key];                }        }        return false;    }    public static function getTimers()    {        return self::$_timers;    }    /**     * Output SQl Zend_Db_Profiler     *     */    public static function getSqlProfiler($res) {        if(!$res){            return '';        }        $out = '';        $profiler = $res->getProfiler();        if($profiler->getEnabled()) {            $totalTime    = $profiler->getTotalElapsedSecs();            $queryCount   = $profiler->getTotalNumQueries();            $longestTime  = 0;            $longestQuery = null;            foreach ($profiler->getQueryProfiles() as $query) {                if ($query->getElapsedSecs() > $longestTime) {                    $longestTime  = $query->getElapsedSecs();                    $longestQuery = $query->getQuery();                }            }            $out .= 'Executed ' . $queryCount . ' queries in ' . $totalTime . ' seconds' . "<br>";            $out .= 'Average query length: ' . $totalTime / $queryCount . ' seconds' . "<br>";            $out .= 'Queries per second: ' . $queryCount / $totalTime . "<br>";            $out .= 'Longest query length: ' . $longestTime . "<br>";            $out .= 'Longest query: <br>' . $longestQuery . "<hr>";        }        return $out;    }}


原创粉丝点击