Главная > Joomla > Joomla — Секреты кэширования

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

Все мы привыкли делать стремительный прогресс в кодировании чтобы создать нужную нам площадку, но в целом лично мне уже это немного поднадоело, и очень хотелось бы уйти в социальные сети. Ведь группу легче создать чем сайт. И даже нашел отличный сайт, где можно быть в курсе всех событий в социальных сетей. Это информационный портал который может стать в прямом смысле основным источником информации о всех популярных социальных сетях в российском сегменте интернета… Советую

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


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

Об авторе: admin