Сайт динамический. Часть страниц меняется редко, а хитов по ним много. Знакомая ситуация? Еще бы. Надеюсь, эта статья поможет Вам несколько ускорить загрузку таких страниц и снять лишнюю нагрузку с сервера.
Мы рассмотрим простой вариант кеширования, когда содержимое кеша обновляется через определенные промежутки времени. В большинстве случаев этого хватает. Конечно, в будущем мы рассмотрим и более сложные случаи.
Для начала определимся, как будет выглядеть кеш. Думаю, что самый простой (и не самый плохой) выход - это просто каталог с файлами, названными определенным образом. Имена файлов будут состоять из несколько видоизмененного query_string и прав пользователя. Из query_string мы вырезаем упоминание о сессии (у разных пользователей она разная, а страница, скорее всего, одна и та же). Права пользователя - важная вещь. Ведь, например, администратор часто видит страницу не так, как обычные пользователи. В данном фрагменте кода мы считаем, что есть глобальная переменная $user, где хранится информация о пользователе, и функция user_rights, которая возвращает права пользователя.
function make_cache_fname() { global $user; return cache/. md5(preg_replace(/^(.*?)&?.session_name()..*$/si, 1, getenv(query_string))). .. md5(user_rights($user)); }
Теперь можем создать функцию, которая будет читать данные из кеша. Если она не найдет нужную информацию, она вернет пустую строку.
Ну а теперь - используем. Объявляем три глобальные переменные - $cache_hits, $cache_expirations, $timelimit. Первая будет хранить количество страниц, взятых из кеша, вторая - список времен, через которые истекает срок хранения данных, взятых из кеша, третья хранит время, через которое кеш надо обновлять.
global $cache_hits, $cache_expirations, $timelimit;
//// use cache - begin //// $cached_page .= page_from_cache(); if ($cached_page != ) { $output .= $cached_page; } // cache hit else { // устанавливаем значение $to_cache add_to_cache($to_cache); $output .= $to_cache; } // no cache hit //// use cache - end //// // используем результат - $output