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

При создании собственного расширения для сайта на движке Joomla в большинстве случаев не помешает оценить объем расходуемой памяти и время исполнения кода скриптов, чтобы оптимизировать скрипты с целью снижения нагрузки на сервер и увеличения производительности создаваемого расширения. Помочь в этом может встроенный в Joomla класс JProfiler.

Использование JProfiler в Joomla


Хотя в принципе в любом PHP коде можно использовать метод, описанный в статье Объем памяти и время работы PHP скрипта, мы все же рассмотрим на конкретном примере использование для Joomla ее родного класса JProfiler для оценки расхода памяти и времени исполнения кода расширений Joomla.

Для начала можно подготовить тестовый компонет, в котором можно будет проверить работу профилировщика JProfiler.
Создадим в каталоге /components/ своего сайта подкаталог /com_test_1/ и в нем файл test_1.php, в который собственно и будем вставлять код для тестирования. В результате у нас должен получиться следующий локальный путь к файлу:
/components/com_test_1/test_1.php

Чтобы вызвать из браузера созданное нами расширение, нужно выполнить простой GET-запрос:


http://ваш-домен.ru/index.php?option=com_test_1

Правда Joomla может не очень охотно принять во внимание искусственно нами созданное расширение, и во избежание проблем просто вручную добавим в базу данных Joomla 1.6-2.5 в таблицу «префикс_extensions» расширение с именем «com_test_1».

Теперь настало время провести тест, чтобы измерить с помощью профилировщика время выполнения кода нашего расширения и расходуемую им память сервера. Для этого добавим в созданный нами ранее файл test_1.php следующий код:

<?php
	// подключаем профилировщик, хотя в данном примере можно обойтись и без этого 
	jimport( 'joomla.error.profiler' );
	
	// получаем ссылку на глобальный объект Profiler
	$p = JProfiler::getInstance('Application'); 
	 
	$p->mark('Начало'); // устанавливаем метку "Старт"
	$a = str_repeat("Booo!\n", 100000); // заносим очень длинную строку в переменную $a
	$p->mark('Метка №1'); // устанавливаем метку "Метка №1"
	sleep(2); // делаем паузу в 2 секунды
	$b = str_repeat("Booo!\n", 500000); // заносим еще более длинную строку в переменную $b
	$p->mark('Метка №2'); // устанавливаем метку "Метка №2"
	unset( $a, $b ); // уничтожаем переменные $a и $b
	$p->mark('Стоп'); // устанавливаем метку "Стоп"
	 
	// Получаем все метки с информацией о времени и памяти
	// и выводим информацию на экран
	echo '<br />';
	$str = $p->getBuffer();
	foreach ($str as $i => $metka) {
		echo '<br />' . $metka;
	}
?>

Теперь вызовем на исполнение созданное нами расширение при помощи запроса GET из адресной строки браузера


http://ваш-домен.ru/index.php?option=com_test_1

В результате на экране мы должны получить от профилировщика JProfiler лог анализа расхода памяти и времени исполнения кода расширения Joomla:

результат работы скрипта с JProfiler

В первой строке мы получили данные от метки «Начало» о том, что с момента начала работы нашего скрипта было израсходовано 4.47 MB памяти.

Во второй строке результаты метки «Метка №1» показали, что после занесения очень длинной строки в переменную $a нашего скрипта память была уже израсходована на 573 Кб больше.

Третья строка содержит отчет метки «Метка №2» и показывает, что после срабатывания в скрипте паузы (sleep(2);) и занесения второй очень длинной строки в переменную $b время выполнения скрипта заняло уже 2.005 секунды, а расход памяти увеличился еще почти на 2.861 Кбайт.

Ну и наконец в последней строке мы получили отчет от метки «Стоп», где видно, что общее время исполнения скрипта нашего фиктивного расширения составило 2,006 секунд, а объем занятой памяти снова уменьшился до начального значения в 4.47 MB, и в этом нам поспособствовала добавленная в скрипт функция unset( $a, $b ), которая уничтожила переменные $a и $b и тем самым высвободила ранее занятую ими память.

Кроме приведенного в примере метода mark('Метка') в других случаях возможно полезно будет использовать и другие методы класса JProfiler:

  • $p->getMemory() - получить информацию об использовании памяти в текущий момент;
  • $p->getBuffer() - возвращает массив всех меток, использованных методом mark('Метка');
  • $p->getmicrotime() - возвращает текущее время;

Приведенный пример конечно слишком упрощен, но поняв методику применения профилировщика класса JProfiler вы сможете использовать его для анализа и оптимизации своих расширений для Joomla.

Метки: , , ,
Другие статьи похожей тематики:

Поделитесь материалом с другими, воспользуйтесь этими кнопками:
Получать обновления и новые материалы блога по E-mail

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

Подписаться на обновления блога 4remind.ru по RSS
Новости блога в социальных сетях

="4remind.ru

Rambler's Top100
Рейтинг@Mail.ru


Силовой кабель ввгнг а frlsltx ula-el.ru. | справка 086/у Беговая Яндекс.Метрика