MaxSite CMS

Официальный сайт

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

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

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

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

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

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

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

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

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

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

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

Думаю, что результат более чем убедительный. smile

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

  1. 2008-05-22 в 09:31:28 | Егор (анонимно)

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

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

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



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