Используем JProfiler
При использовании функции кэширования вам наверняка будет интересно узнать насколько ускорился ваш скрипт. Для этого мы будем использовать класс joomla JProfiler.<?php // Создаем объект JProfiler. $profiler = new JProfiler(); // Отображаем время. echo $profiler->mark( ' секунд прошло' ); ?>
Создаем тестовую функцию
Мы сделаем небольшой компонент, который фактически ничего не делает, но на его примере, я покажу как рассчитать время, необходимое для выполнения функции. Во-первых нужно создать файл компонента:/components/com_testcache/testcache.php
В файле создадим класс с одним методом:
<?php // нет прямого допуска. defined( '_JEXEC' ) or die( 'Restricted access' ); class TestClass { function testMethod() { // подключаемся к бд. $db = & JFactory::getDBO(); // выполняем 250 запросов в бд. for ($i=0; $i<250; $i++) { $db->setQuery( 'SELECT * FROM #__content' ); $rows = $db->loadObjectList(); } return $rows; } } // запускаем наш метод. $rows = TestClass::testMethod(); ?>250 запросов - это много. Но так мы заметим разницу в производительности с кэшированием и без него.
Объект кэширования
Для начала включите кэширование в глобальных настройках cms joomla.Теперь создадим ссылку на класс кэширования через JFactory
<?php $cache = & JFactory::getCache(); ?>Если вы хотите, чтобы ваш компонент использовал кэширование, даже если оно отключено в глобальной конфигурации, Вы можете настроить его сами:
<?php $cache->setCaching( 1 ); ?>Далее вызовим наш метод через объект кэширования:
<?php $rows = $cache->call( array( 'TestClass', 'testMethod' ) ); ?>Если мы хотим вызвать кэширование конкретной функции, то не нужно использовать массив:
<?php $rows = $cache->call( 'testFunction' ); ?>Во время тестирования кода, мы можем использовать следующий метод для очистки кэша:
<?php $cache->cleanCache(); ?>Этот метод удалит все файлы из папки /cache
Теперь объеденим все вместе
Чтобы сравнить производительность, вызываем наш метод два раза. Один разу через объект кэша, и один раз без него:<?php class TestClass { function testMethod() { $db = & JFactory::getDBO(); for( $i=0; $i<250; $i++) { $db->setQuery( 'SELECT * FROM #__content' ); $rows = $db->loadObjectList(); } return $rows; } } // создаем объект кэша $cache = & JFactory::getCache(); // тестируем без кэша $profiler = new JProfiler(); $rows = TestClass::testMethod(); echo $profiler->mark( ' без кэша' ); // тестируем с кэшем $profiler = new JProfiler(); $rows = $cache->call( array( 'TestClass', 'testMethod' ) ); echo $profiler->mark( ' с кэшем' ); ?>Теперь запускаем наш компонент через index.php?option=com_testcache. Первые результаты будут такими:
2.093 без кэша
2.160 с кэшем
Результат с кэшированием получился больше, потому что некоторое время ушло на запись кэша в файл. Теперь перезагрузим страницу в броузере.
2.073 без кэша
0.008 с кэшем
Нехилые результаты?:) а теперь умножьте выигранное время на колличество посетителей, и поймете свой реальный выигрыш;)
Выводы по кэшированию в Joomla
Наш пример использует очень медленные запросы к базе данных 250 раз. Мы видим огромное увеличение в скорости. Тем не менее, использование кэш-памяти не всегда ускоряет процесс. Попробуйте значительно уменьшить число запросов и посмотрите сами. Для этого мы и использовали Jprofiler, чтобы увидеть результаты ускорения.И, конечно помните, что кэширование не является заменой для эффективного программирования:)






да я рад и ответу по joomla