Говорят, что создание сайта - очень длительный и трудоемкий процесс. Мы скажем - НЕТ! Ведь с новыми технологиями, такими как HTML5, CSS3, PHP и MySql можно быстро и легко научиться создавать сайты любой сложности.
Два сумасшедших веб-мастера покажут где что лежит и как этим пользоваться.
Авторизация
Новый
Забыл
Пожалуйста, заполните поля выше. Это нужно сделать обязательно, иначе ничего не получится.
PHP Статейки /

Кэширование страниц на PHP

  • Воскресенье, 7 ноября 2011, 02:55 |
  • Автор: fiamma |
  • Просмотров: 2967 |
  • Комментарии: 2 |
  • В закладки:
Кэширование страниц на PHPКэширование страниц - очень полезная вещь. Особенно тогда, когда страницы генерируются динамически. Например: Сначала достается информация из БД, затем прогоняется через шаблонизатор, добавляя "яркости" странице и только потом выдается пользователю.

Такой тип формирования веб-страницы - один из самых "модный" на данный момент. Но зачастую создаются страницы гораздо реже, чем редактируются, создавая дополнительную нагрузку на базу данных и сервер. А можно сделать по другому - при каждом запросе пользователя проверять есть ли страница в кэше. Если ее нет, то генерировать страницу и загружать ее в кэш. Иначе выдавать пользователю уже готовую веб-страницу.

Однако при таком режиме работы существует один нюанс - это устаревание кэша. Если данные на странице изменились, а страница в кэше не успела измениться, пользователь увидит устаревшую страницу. А это не есть "Хорошо". Решение данной проблемы:

1. Устанавливать приемлемое время устаревания кэша. Например через 8 минут, страница устаревает и создается заново. Но может возникнуть ситуация, когда пользователю 8 минут будет показываться устаревшая страница.

2. Можно сделать кнопку "Очистка кеша", при нажатии на которую содержимое кэша очищается.

3. Сделать умную очистку кэша. Будут удаляться только те страницы кэша, которые были изменены.

Лично я использую все три метода.

Кэширование страниц на PHP


А теперь давайте поговорим как реализовать кэширование в php. В данном языке программирования есть одна очень полезная функция - ob_start, использование которой позволяет не выводить страницу пользователю, а сохранять ее скажем в переменную.

Рассмотрим код:
$url=$GLOBALS['REQUEST_URI'];
$crc=md5($url);

$modif=time()-@filemtime ("cache/$crc");

if ($modif<400)
{
include ("cache/$crc");
exit();
}

ob_start ();

Сначала мы узнаем адрес страницы, после чего генерируем из него md5 hash. Эти данные мы будем использовать для формирования идентификатора страницы. Файлы кэша будут лежать в папке cache. Далее мы смотрим сколько времени использовалось странице. Если ей больше 400 секунд и страница существует, выводим ее пользователю с помощью include.

Если нет - то задействуем ob_start и продолжаем дальше:
$cache = ob_get_contents();
ob_end_clean ();
echo $cache;

$fp = @fopen ("cache/$crc", "w");
@fwrite ($fp, $cache);
@fclose ($fp);

Этот код необходимо расположить в конце страницы.

Теперь мы извлекаем содержимое буфера с помощью ob_get_contents() и очищаем буфер. Выводим в браузер с помощью echo. Записываем содержимое буфера ($cache) в директорию cache в файл $crc.

Вот и все. Теперь наш скрипт будет проверять наличие страницы в кэше и проверять не устарела ли она. Если все хорошо, то скрипт выводит данные и завершает выполнение используя exit.

Парочка PHP-примеров для прогеров думаю вас также заинтересует

А уж если Вам срочно требуется работа, то вакансии в Москве заинтересуют Вас не меньше! Узнайте о востребованных профессиях, состоянии рынка труда в Москве и горячих вакансиях прямо сейчас!
Добавить комментарий