Наверное не только мне, но и другим начинающим 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 )
а где объем используемой памяти7
Привет beagler, добавил пример по выводу используемой памяти, но из документации. Пока не использовал профилировщик в тестировании своих joomla-плагинов.