Вступление
В этой не большой статье я хочу показать простой пример кеширования страниц в php. Но для начала нужно разобраться, что вообще такое кеширование и зачем оно нужно. Часто в «жизни» сайта случается момент, когда в процессе роста размера и количества страниц, сайт начинает заметно медленнее работать. Этого не избежать если сайт постоянно наполняется и развивается, и это нормально — так и должно быть. С увеличением размера сайта, увеличивается и нагрузка на сервер. Как снизить нагрузку на базу данных, я уже недавно писал в статье «Простой пример использования memcached», но помимо снижения нагрузки на бд, увеличить скорость работы сайта можно и с помощью кеширования страниц.
Как работает кеширование страниц?
Прежде чем загрузиться, на страницах ваших сайтов наверняка выполняются различные циклы, условия и другие действия. Все эти вычисления занимают какое-то время и тратят ресурсы сервера. Кеширование позволяет избежать лишних действий. То есть, при включенном кешировании страниц, для каждой страницы создается файл, в котором хранится уже сгенерированный html код.
При первом просмотре страницы сайта, html код страницы сохраняется в файл. При последующих обращениях к этой странице, в браузере отображается уже ранее полученный html код, пропуская часть кода, в котором присутствуют циклы, условия и прочая логика. Для того чтобы данные время от времени обновлялись кешу задается «время жизни», и при каждом обращении к файлам кеша, они проверяются на актуальность. Если кеш устаревает, то страница генерируются по новой и кеш обновляется.
Простой пример кеширования страниц в php
А теперь приведу простенький пример использования кеширования, код подробно прокомментирован:
<?php
// мониторим скорость выполнения
$start = microtime(true);
// задаем время жизни кэша в секундах
$cacheTime = 60;
// Название скрипта
$fileName = strrchr($_SERVER["SCRIPT_NAME"], "/");
// удаляем все слеши
$fileName = trim($fileName, '/\\');
// путь для хранения кеша
$cacheFile = "cache/$fileName.cache";
// если кэш существует
if (file_exists($cacheFile)) {
// проверяем актуальность кеша
if ((time() - $cacheTime) < filemtime($cacheFile)) {
// показываем данные из кеша
echo file_get_contents($cacheFile);
// мониторим скорость работы
echo 'Время выполнения скрипта: '.(microtime(true) - $start).' сек.';
exit; // Завершаем скрипт
}
}
// открываем буфер
ob_start();
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test cache</title>
<meta http-equiv="content-type"content="text/html; charset=utf-8" />
</head>
<body>
<?php
// для теста
$arrayTest = array();
for ($i=0; $i < 10000; $i++){
$arrayTest[$i] = $i;
}
foreach($arrayTest as $i){
echo $i;
}
?>
</body>
</html>
<?php
// Открываем файл для записи
$file = fopen($cacheFile, 'w');
// сохраняем все что есть в буфере вфайл кеша
fwrite($file, ob_get_contents());
// закрываем файл
fclose($file);
// выводим страницу
ob_end_flush();
// мониторим скорость работы
echo 'Время выполнения скрипта: '.(microtime(true) - $start).' сек.';
?>
Мои замеры скорости показали, что страницы загружаемая из кеша работает в разы быстрее, вот собственно и сами результаты замеров:
Без кеша:
0.017503023147583 сек.
0.01046895980835 сек.
0.017349004745483 сек.
0.01500391960144 сек.
0.008213996887207 сек.
С кешем:
0.00067591667175293 сек.
0.00054097175598145 сек.
0.00065994262695312 сек.
0.00069594383239746 сек.
0.00057792663574219 сек.
Напоследок хочу заметить — используйте кеш для ускорения работы сайтов, но и не забывайте про качество и оптимизацию кода!


Вообще не вариант.
Мониторь: salat-production.ru/blog/klass-blochnogo-keshirovaniya-stranic.php
А в чем разница с моим примеров? все тоже самое, только оформлено в класс.
Я свое решение просто как пример написал, а дальше уже дело техники
Я думаю все же не стоит кешировать html страницы по SCRIPT_NAME.
К примеру: зашел Вася Пупкин в личный кабинет, а ему система говорит «Здравствуйте Петя Васечкин!». Поимаете о чем я?
da