Recommended Posts

в начало index.php

$time_start = microtime(true);require('memdbg.php');$m = new MemoryUsageInformation(true);

сам класс:

<?php/* спасибо автору скрипта, к сожадению мне не известному*/class MemoryUsageInformation {    private $real_usage;    private $statistics = array();    public function __construct($real_usage = false) {        $this->real_usage = $real_usage;    }    public function getCurrentMemoryUsage($with_style = true) {        $mem = memory_get_usage($this->real_usage);        return ($with_style) ? $this->byteFormat($mem) : $mem;    }    public function getPeakMemoryUsage($with_style = true) {        $mem = memory_get_peak_usage($this->real_usage);        return ($with_style) ? $this->byteFormat($mem) : $mem;    }    public function setMemoryUsage($info = '') {        $this->statistics[] = array('time' => time(),            'info' => $info,            'memory_usage' => $this->getCurrentMemoryUsage());    }    public function printMemoryUsageInformation() {        foreach ($this->statistics as $satistic) {            $str =  "Time: " . $satistic['time'] .                " | Memory Usage: " . $satistic['memory_usage'] .                " | Info: " . $satistic['info'];            $str .= "\n";        }        $str.= "\n\n<br />";        $str.= "Peak of memory usage: " . $this->getPeakMemoryUsage();        $str.= "\n\n<br />";        return $str;    }    public function setStart($info = 'Initial Memory Usage') {        $this->setMemoryUsage($info);    }    public function setEnd($info = 'Memory Usage at the End') {        $this->setMemoryUsage($info);    }    private function byteFormat($bytes, $unit = "", $decimals = 2) {        $units = array('B' => 0, 'KB' => 1, 'MB' => 2, 'GB' => 3, 'TB' => 4,            'PB' => 5, 'EB' => 6, 'ZB' => 7, 'YB' => 8);        $value = 0;        if ($bytes > 0) {            if (!array_key_exists($unit, $units)) {                $pow = floor(log($bytes)/log(1024));                $unit = array_search($pow, $units);            }            $value = ($bytes/pow(1024,floor($units[$unit])));        }        if (!is_numeric($decimals) || $decimals < 0) {            $decimals = 2;        }        return sprintf('%.' . $decimals . 'f '.$unit, $value);    }}

для независимости добавил в main.php перед render шаблона , но по правильному надо в выход:

// ************************************************//        global $time_start, $m;        $time_end = microtime(true);        $precision = 2;        $tr= 'Build time : '. intval(($time_end - $time_start)*pow(10,$precision))/pow(10,$precision).' sec';        $smarty->assign('timerender',$tr);        unset($tr);        $usemem= memory_get_peak_usage();        $usemem = 'Memory: '. round($usemem/1024/1024,2) . ' Mb';        $smarty->assign('usemem',$usemem);        unset($usemem);        $smarty->assign('pr_m',$m->printMemoryUsageInformation());// ************************************************//

ну и в самом main.tpl перед </body>:

<div class="dbg">{$timerender} - {$usemem} - {$pr_m}</div>

можно использовать, как вариант, для замера цикла:

$m = new MemoryUsageInformation(true);$m->setStart();$a = array();$m->setMemoryUsage("до цикла");for($i = 0; $i < 100000; $i++) {    $a[$i] = uniqid();}$m->setMemoryUsage("после цикла");unset($a);$m->setMemoryUsage("после unset()");$m->setEnd();$m->printMemoryUsageInformation();

Осталось притулить sql вывод и получится debug панелька. Хотя лучше всё организовать на уровне хелпера.

post-1927-0-40336400-1397942537_thumb.pn

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: Дмитрий Кондин
      В админке есть специальное приложение, чтобы записывать различные системные события.
      Приложения - System logger По-умолчанию прилжоение выключено.
      Включить его можно в Настройки - вкладка System logger
      Включить приложение Logger (apps.logger.enable) Ставим 1.
      Теперь при выполнении приложений туда будут записываться различные отладочные сообщения.
      Самое интересное в этом то, что вы сами можете при доработках делать отладку, чтобы посмотреь различные переменные и массивы в процессе выполнения.
      Для у себя в коде вызываем метод так:
      $this->writeLog('Это отладочный текст'); Например, нам нужно увидеть что в переменной $test_var
      Тогда код для записи отладки будет таким
      $this->writeLog('test_var = '.$test_var); Если хотим увидеть что у нас в массиве $test_arr то делаем такой код
      $this->writeLog('test_arr = <pre>'.var_export($test_arr, true).'</pre>');