Добавить в избранное

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

Дата: 2011-11-27

Не cекрет, что статичные сайты грузятся быстрее динамичных. Это происходит потому, что статичный сайт выдает пользователю в браузер себя "сразу как он есть", в то время как динамический сайт предварительно обрабатывается на сервере, делает запросы к базе данных. Суть кэширования на стороне сервера состоит в том, чтобы записать все, что происходит на сервере, в файл, сохранить его и при последующем обращении этого, либо любого другого пользователя к этой странице просто выдать ему статичную копию. В результате мы получим не только ускорение загрузки страниц, но и снизим нагрузку на сервер и базу данных. Реализуем самый простой, на мой взгляд, способ буферизации.

Нам понадобятся функции:
file_exists() - проверяет наличие указанного файла или каталога.
readfile() - позволяет прочитать данные из файла. Т.е. эта функция будет читать наш статичный файл
ob_start() - включает буферизацию вывода. Т.е. все, что будет происходить после этой функции, будет сохранено в буфер(временное хранилище)
ob_get_contents() - получает содержимое буфера вывода.
ob_end_flush() - отправляет содержимое буфера вывода пользователю (если оно имеется), очищает его и выключает буферизацию вывода.
fopen - открывает файл или URL
fwrite() - записывает содержимое в файл.
fclose() - закрывает файл.
На сервере предварительно создадим папку caсhe (название можно придумать любое допустимое)

Итак, приступим:
1. В самом начале нашей php - страницы пишем:

if (file_exists('cache/index_'.$_GET["page"].'_'.$_GET["id"].'.cache')){ 
readfile('cache/index_'.$_GET["page"].'_'.$_GET["id"].'.cache'); exit();}
ob_start();
// далее идет любой ваш html-php код
include("includes/bd.php"); и т.д. и т.п.
?> 

 Если у нас существует файл index_xx_yy.cache, то просто считываем содержимое файла, выводим на экран и останавливаем какие-либо дальнейшие действия на странице. Здесь xx - это значение переменной $_GET["page"] (например номер страницы), уу - это значение переменной $_GET["id"] (например какой-то параметр, формирующий нашу страничку). Если же нет, в папке кэш нашей статичной копии включаем буфер и записываем в него все, что происходит на странице.


2. В самом конце после тэга :

 

ob_end_flush(); 
$fp = fopen('cache/index_'.$_GET["page"].'_'.$_GET["id"].'.cache', 'w');
fwrite($fp, $buffer);
fclose($fp);

Мы записываем в $buffer содержимое буфера, после останавливаем буферезацию и очищаем его. Затем открываем файл index_xx_yy.cache // (если его нет на сервере, то создаем, за это отвечает параметр 'w' у ф-ции fopen), записываем в файл $fp значение $buffer и закрываем его. Теперь у нас php - страница будет обрабатываться на сервере 1 раз с первым посетителем, а для всех последующих выводить статичный html- код.
Что будет если параметров $_GET["page"] и $_GET["id"] не существует? (если загружена страница index.php без переменных $_GET). Файл index_xx_yy.cache примет вид index__.cache (после index двойная черта), что в принципе является нормальным именем файла :)



3. Теперь о том, как очистить кэш. Это необходимо когда вы добавили что-то новое на страницу или на сайт, у вас появилась новая запись в гостевой. Просто добавьте в нужном месте (например после того, как запись в гостевой была добавлена в базу данных):

 

unlink ('cache/index_'.$_GET["page"].'_'.$_GET["id"].'.cache');

та функция удалит кэш файл index_xx_yy.cache

Помните:
Папка cache должна быть доступна на запись. Если предполагается выводить какие-то случайные заметки , стоит проводить буферизацию блоками и подключать БД к страничке до включения буферизации, т.е. вы должны определить что должно кэшироваться и кэшировать только нужные участки, создавая файлы в папке кэш с названием ваших блоков. В принципе тоже ничего сложного, если вы поняли это урок, сделать блочную буферизацию не составит большого труда.

Вот и все, что требуется для простейшей реализации кэширование сайта на стороне сервера. Всем удачи, коменты приветствуются.

Данный урок подготовлен для Вас сайтом  tiwebmaster.ru
Источник урока: phpwiki.ru

Просмотров: 777

Последние 5 уроков

Отправка письма при помощи функций php

В данном уроке вы узнаете как отправлять письма по средствам функций пхп. а также управлять данными посылаемые в email письмо


Загрузка больших файлов на сервер используя PHP

Здравствуйте. Сегодня мы поговорим с Вами о том, как можно увеличить размер загружаемого файла в PHP. С такой проблемой сталкиваются многие, однако они и не догадываются, как же все-таки ее правильно решить...


Как защитить файлы инклюда от прямого вызова?

Сегодняшний урок я скорее всего назвал бы не уроком, а ответом на вопрос, заданном на сайте evgeniypopov.com.


PHP шпаргалка

PHP шпаргалка сделана таким образом, что ее можно распечатать на лист формата А4. Ниже представлено описание каждого листка.


Знай, когда Google индексирует твой сайт

Хотели бы Вы знать, когда Google бот заходит на Ваш сайт? Предлагаю Вам простой скрипт на PHP, который будет отправлять Вам email каждый раз при заходе бота на сайт.


Видео уроки по php,jquery,ajax,css,html,сео