Как узнать время исполнения кода и размер используемой памяти в расширениях Joomla?

Наверное не только мне, но и другим начинающим Joomla-разработчикам интересно как проверить создаваемое расширение на тему ресурсоемкости и оптимизации кода. Команда разработчиков Joomla специально для этого реализовала системный класс с говорящим названием JProfiler.

Далее кратко о принципе работы профилировщика в Joomla и пара примеров.

Измерим с помощью профилировщика время выполнения 250 запросов к БД из Joomla в цикле без использования кэширования и с ним в тестовом компоненте com_testcache:

<?php
 
class TestClass {
 
    function testMethod() {
 
        // Get a reference to the global database object.
        $db = & JFactory::getDBO();
 
        // Execute the same database query 250 times.
        for( $i=0; $i<250; $i++) {
            $db->setQuery( 'SELECT * FROM #__content' );
            $rows = $db->loadObjectList();
        }
 
        return $rows;
    }
}
 
// Get a reference to the global cache object.
$cache = & JFactory::getCache();
 
// Run the test without caching.
$profiler = new JProfiler();
$rows = TestClass::testMethod();
echo $profiler->mark( ' without caching' );
 
// Run the test with caching.
$profiler = new JProfiler();
$rows  = $cache->call( array( 'TestClass', 'testMethod' ) );
echo $profiler->mark( ' with caching' );
 
?>

Теперь вызовем код компонента на исполнение используя гет-запрос index.php?option=com_testcache. После первого запуска результат будет следующим:
2.093 without caching
2.160 with caching

Второй результат несколько больше т.к. потребовалось время для записи возвращенных из БД данных в кэш-файл. Теперь обновим страницу в браузере.
2.073 without caching
0.008 with caching

Результат красноречив. При последующих перезагрузках секунды будут меняться незначительно.

Подсчет используемой памяти

Пример из документации по классу:

$p = JProfiler::getInstance('Application'); // Получаем ссылку на глобальный объект Profiler
 
$p->mark('Start'); // Устанавливаем метку Start
$a = str_repeat("hello world!\n", 100000); // Тестовые действия
$p->mark('Middle');
unset($a);
$p->mark('Stop');
 
print_r($p->getBuffer()); // Получаем метки с информацией о времени и памяти

Будет выведено:

Array
(
    [0] => Application Start: 0.000 seconds, 0.10 MB
    [1] => Application Middle: 0.005 seconds, 1.34 MB
    [2] => Application Stop: 0.005 seconds, 0.10 MB
)

Комментариев: 2

  • 28.11.2010 beagler:

    а где объем используемой памяти7

  • 28.11.2010 Кирилл:

    Привет beagler, добавил пример по выводу используемой памяти, но из документации. Пока не использовал профилировщик в тестировании своих joomla-плагинов.


Добавление комментария:

 css.php