Перейти к содержимому

Приветствуем вас на 99Fps.Ru - Дом, милый дом!
Зарегистрируйтесь сейчас, чтобы получить доступ ко всем нашим функциям. После регистрации и входа в систему Вы сможете создавать темы, отвечать на существующие темы, использовать систему репутации ввиде бананчиков, получить свой собственный мессенджер, размещать обновления статусов, управлять профилем и многое другое. Если у вас уже есть учетная запись, Войдите - Регистрация нового аккаунта


Фотография

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


  • Закрытая тема Тема закрыта
В этой теме нет ответов

#1
 Steve

Steve
  •  Создатели
  • 671 сообщений





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

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


<?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");
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR...nsitional.dtd">
и т.д. и т.п.
?>
Если у нас существует файл index_xx_yy.cache, то просто считываем содержимое файла, выводим на экран и останавливаем какие-либо дальнейшие действия на странице. Здесь xx - это значение переменной $_GET["page"] (например номер страницы), уу - это значение переменной $_GET["id"] (например какой-то параметр, формирующий нашу страничку). Если же нет, в папке кэш нашей статичной копии включаем буфер и записываем в него все, что происходит на странице.
 
2. В самом конце после тэга </html>:


<?php $buffer = ob_get_contents();
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 должна быть доступна на запись. Если предполагается выводить какие-то случайные заметки , стоит проводить буферизацию блоками и подключать БД к страничке до включения буферизации, т.е. вы должны определить что должно кэшироваться и кэшировать только нужные участки, создавая файлы в папке кэш с названием ваших блоков. В принципе тоже ничего сложного, если вы поняли это урок, сделать блочную буферизацию не составит большого труда.
Вот и все, что требуется для простейшей реализации кэширование сайта на стороне сервера. Всем удачи, коменты приветствуются.
  • 3

99fps_1404425473__screenshot_209.png

99fps_1429548516__screenshot_1.png





Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных