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