Главная страница статей --> Советы по фотошопу, графике и хитрости в построении php кода

Простой способ кеширования страниц

Источник: realcoding.net

Сайт динамический. Часть страниц меняется редко, а хитов по ним много. Знакомая ситуация? Еще бы. Надеюсь, эта статья поможет Вам несколько ускорить загрузку таких страниц и снять лишнюю нагрузку с сервера.

Мы рассмотрим простой вариант кеширования, когда содержимое кеша обновляется через определенные промежутки времени. В большинстве случаев этого хватает. Конечно, в будущем мы рассмотрим и более сложные случаи.

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

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

function page_from_cache() {
global
$cache_hits, $cache_expirations, $timelimit;
$fname = make_cache_fname();
if ((
file_exists($fname)) and
((
$time_diff = (time() - filemtime($fname))) < $timelimit)) {
$fchk = fopen($fname, r);
$output = fread($fchk, filesize($fname));
fclose($fchk);
$cache_hits++;
$tm = $timelimit - $time_diff;
$cache_expirations .= ((strlen($cache_expirations) > 0) ? , : ).
((
strlen($tm) > 0) ? $tm : 0);
return
$output;
}
// cache hit
else {
return
;
}
}

Ну и, конечно, никак нельзя обойтись без добавления в кеш. Тут все просто.

function add_to_cache($txt) {
$fname = make_cache_fname();
$fchk = fopen($fname, w);
fwrite($fchk, $txt);
fflush($fchk);
fclose($fchk);
}

Ну а теперь - используем. Объявляем три глобальные переменные - $cache_hits, $cache_expirations, $timelimit. Первая будет хранить количество страниц, взятых из кеша, вторая - список времен, через которые истекает срок хранения данных, взятых из кеша, третья хранит время, через которое кеш надо обновлять.

global $cache_hits, $cache_expirations, $timelimit;

$cache_hits = 0;
$cache_expirations = ;
$timelimit = 150;

//// 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

Где-нибудь внизу страницы можем вывести статистику:

echo cache hit(s): .$cache_hits.
(.((strlen(trim($cache_expirations)) > 0) ? $cache_expirations : 0).);



Похожие статьи:
- Создание сайтов с возможностью печати PDF на примере PDF::AP
- Как бороться с magic_quotes_gpc
- Что такое PageRank Googleа и как получить его по максимуму
- Выбор из БД в случайном порядке на PHP
- Раскрутка сайта из собственного опыта
- Ловушка для спам-бота
- Как сделать свою RSS-ленту
- Как нарисовать звезду.


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]