RSS   Twitter   Copiny   Copiny
Нашел ошибку? 

Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!

Профилирование кода в JBDump

С помощью JBDump можно не только дампить переменные, но и измерять время выполнения отдельно взятых фрагментов кода. Например так:

JBDump::mark('start loop');
echo 'start loop';
    // проблемное место с большим количеством действий
    $bigArray = array();
 
    for ($i=0; $i < 10000; $i++) { 
        $bigArray[$i] = $i+$bigArray[$i-1];
    }

    // сам отладчик (как и любые другие) тоже довольно прожорливый
    // это еще одна причина не использовать его на продуктиве
    jbdump($bigArray, 0, '$bigArray');

JBDump::mark('finish');
echo 'finish';

    jbdump::microtime();
    jbdump::memory();
    jbdump::microtime();

JBDump::mark('other functions');
echo 'other functions';
jbdump($var);

Заметьте, что явного вызова результатов профайлера нету, но тем не менее он выводиться. Это можно настроить.

Явный вызов результатов профилирования

JBDump::profiler();
JBDump::profiler(1); // перенаправление ответа в лог файл

Живой пример

Пример содержимого лог файла профайлера:

Profiler start -------------------------------------------------------
Mark #0 0.000 seconds (+0.000); 0.37 MB (+0.366) profiler.php:17 - start loop
Mark #1 0.280 seconds (+0.279); 3.23 MB (+2.867) profiler.php:28 - finish
Mark #2 0.285 seconds (+0.005); 1.42 MB (-1.809) profiler.php:35 - other functions
Profiler finish -------------------------------------------------------

Информация, которая отобразиться в браузере и в лог файле — одинаковая. В скобках отображается разница во времени и использовании памяти в разных точках приложения. Например из предыдущего лога видно, что цикл и jbdump работали 0.279 секунды при этом использовал 2.867 МБ памяти. Далее PHP освободил память на 1.809 МБ (столько использовал jbdump для отрисовки массива в 10000 элементов). Всего прошло времени 0.285 сек.

Каждая отметка имеет свое название и место вызова. Таким образом наглядно видно куда использовалось время и память сервера.

Об этом стоит знать и помнить

Некоторые наверно заметили — первая отметка показывает, что уже использовалось 0.366 МБ памяти, хотя мы не ставили отметки ранее. При первом вызове JBDump отметил состояние системы автоматически (время и память). Это произошло в файле init.php (сработал конструктор класса)

Таким образом можно поставить в любом месте только одну отметку и получить результат профилирования от начала работы приложения до этой отметки. При этом даже не придется вызывать отрисовку результата. При соответствующих настройках — после вызова деструктора, die() или аварийного завершения скрипта автоматически сработает метод profiler(). Именно поэтому в примере профайлер отображается после сообщения «JBDump_die».

Смотрите также:
Оставить комментарий




* обязательно для заполнения

1 введенный почтовый адрес используется только для обратной связи при ответах в комментариях и сервиса gravatar.com
.