Кэширование в MaxSite CMS

Вторник, 20 мая 2008 г.
Рубрика: MaxSite CMS
Просмотров: 4180
Подписаться на комментарии по RSS

Основной способ борьбы с высокой нагрузкой ложится на кэширование. Именно за счет кэширования достигается максимальная разгрузка сервера. Для проектов с небольшой посещаемостью кэширование может вовсе не понадобится. А вот для более-менее посещаемых, использование кэша вполне оправданно. По моим прикидкам кэширование есть смысл использовать для сайтов от 100-200 хостов в день. Во всяком случае при такой посещаемости кэш обновляется не чаще, чем это будет требоваться.

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

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

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

Данный вид кэширования реализуется точно также, как и локальное. Разница только в том, что в качестве ключа нужно использовать адрес страницы (url). Вот пример шаблонного index.php:

    $cache_key = mso_md5($_SERVER['REQUEST_URI']);
    $k = mso_get_cache($cache_key);
    if ($k)
    {
        $CI = & get_instance();    
        $k = str_replace('<!-- cache_info -->', 
    ' | This cache: ' . $CI->db->query_count, $k);
        return print($k);
    }
    ob_start();
    ...  
 // время кэша в секундах
    mso_add_cache($cache_key, ob_get_flush(), 300);

Данный код выполняет кэширование любой страницы на 5 минут (300 секунд). В качестве примера я добавил замену cache_info на количество реальных запросов к БД.

Результаты на тестовом сайте такие:

  • количество запросов сократилось с 12 до 0;
  • потребление памяти сократилось с 3Мб до 2Мб;
  • время работы сократилось с 1,5 секунд до 0,1-0,2 секунд.
Думаю, что результат более чем убедительный. smile

twitter.com facebook.com mail.ru friendfeed.com livejournal.ru memori.ru google.com yandex.ru

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

  1. Жду не дождусь Вашей CMS. С виду очень шустрая.

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

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Комментарий будет опубликован после проверки

Имя и сайт используются только при регистрации

Если указать email (зарегистрироваться), то будет уведомление о новых комментариях.

Авторизация Loginza.

(обязательно)