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

Вступление

Простой пример кеширования страниц в phpВ этой не большой статье я хочу показать простой пример кеширования страниц в 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 сек.

Напоследок хочу заметить —  используйте кеш для ускорения работы сайтов, но и не забывайте про качество и оптимизацию кода!

Рассказать друзьям:


Простой пример кеширования страниц в php: 3 комментария

    1. А в чем разница с моим примеров? все тоже самое, только оформлено в класс.
      Я свое решение просто как пример написал, а дальше уже дело техники

  1. Я думаю все же не стоит кешировать html страницы по SCRIPT_NAME.
    К примеру: зашел Вася Пупкин в личный кабинет, а ему система говорит «Здравствуйте Петя Васечкин!». Поимаете о чем я?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*