Секреты кэширования в Joomla

Обычно в вебе, один и то же контент отображается снова и снова. Кэширование позволяет увеличить скорость генерации, сохраняя уже сгенерированную страницу в файл. Есть разные способы сделать это, но я рассмотрю только один из методов. Хочу обрадовать, что в joomla кэширование реализуется очень просто:)

Используем 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 - Генератор расширений Joomla и многое другое на нашем сайте посвященном работе расширений, компонентов, модулей, плагинов для линейки Joomla. Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.

Блог

Календарь приёма объявлений

Небольшой пример из повседневной практики. Организация меняет реквизиты, и они вступят в силу через  пару недель. На сайте идет приём объявлений и объявления принимаются на несколько месяцев в...

Дырка в com_content

Сегодня у товарища, сайт которого находится на старой  Joomla 1.0.3, была сильная нагрузка на сервере, просматривая логи обнаружил не вежливый запрос такого порядка: http://сайт/index2...

Лечим вирус на сайте

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

Troj/JSRedir-MH

Снова грянул гром зарежения сайтов новым вирусом  Troj/JSRedir-MH.  И так в коротко по вирусу Troj/JSRedir-MH. Вирус или троян куда интереснее чем свои предшествиники, тепер...

Доработка расширения для рассылки Send Email JK

Сегодня поделюсь немного интересной информацией для владельцев сайтов собранных ан joomla.  Рано и поздно возникает задача подписки и рассылки информации с сайта, это может быть разная постановка зада...

Привет Ie 10 регулярка

И вот и мне пришлось столкнулся с проблемами перехода на win 8 в придачу с ie 10, некоторых постоянных пользователей моих сайтов. На многих сайтах  имеющих раздел по приёму объявлений, использ...

Kunena заменяем ссылку на профиль пользователя

Всем привет, снова снова кунена, получил задание на допиливание популярного форума Kunena, сегодня потребовалось поменять ссылку на профиль пользователя. Это связано с тем, что на сайте стоит социа...

Работает на Kunena - зачем на каждой странице?

  Все у кого стоит форум kunena мешает надпись с двумя ссылкам внизу форума "Работает на Kunena". Сея надпись висит на каждой странице форма, а также страница разработчиков содержит множество вн...

Kunena избавимся от лишних quote

Для тех кто действительно делает сайт для людей, моя следующая заметка. Расскажу вам, как избавиться от лишних quote в постах на форуме kunena. У меня несколько тематических сайтов с нормальной посеща...

Kunena решаем проблему с пропажей аватаров

Так и вот мы обновись до последней версии кунены, сразу видно компонент внутри сильно изменился, и вот незадача у некоторых пользователей пропали аватары, физически они есть но неотображаются. ...

Джомлавикам

Обработка параметров расширений joomla

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

Кunena крамсаем шаблон

1. В папке \components\com_kunena\template\ваш_шаблон\ находим файл template.xml и вставляем в него такой кусок (чтобы была возможность выбора показывать это поле или нет): <param name="l...

Подключить свои классы и методы в Joomla?

Иногда случается, что набор собственных функций или библиотек нужно подключить в Joomla. Но иногда подключить их нужно так, чтобы они присутсвовали во всей системе, вне зависимо...

3 новых полезных класса в Joomla 2.5

В платформе Joomla 11.3 разработчики добавлил несколько полезных новых классов для разработчиков. Рассмотрю некоторый из них - JGrid (для построения HTML таблиц), JWebClient (для получения информац...

Репозиторий файлов на Joomla средствами Apache

Создадим две вложенные директории /files/files в корне сайта. Если вы пожелаете использовать другие имена директорий, то вам необходимо будет внести соответствующие правки в дальнейшем. ...