Кэширование данных в PHP - ускоряем просмотр страниц
Просмотров: 17845.
Подписаться на комментарии по RSS.
Кэшировать данные веб-сайта имеет смысл в динамичных проектах, где есть необходимость в быстрой работы сайта с минимум потерей ресурсов. Возникает вопрос "Что нужно кэшировать?", кэшировать нужно то, что долго выполняется или использует всякий раз много ресурсов. Если у вас сайт-визитка или обычный HTML сайт то кэшировать данные посредством PHP нет смысла, так как принцип кэширования является следующим, превращение на время динамичную часть сайта в статическую т.е. любой временный файл которого мы будем открывать каждый раз когда будет доходить до выполнения нашего тяжелого участка кода.
Схема как работает кэширование данных:
Просмотрим класс который берет на себя ключевую роль в процессе кэширования данных в нашем примере и обсудим каждый метод класса в отдельности.
<?php /** ---------------------------------------- ** Кеширования данных в файлах ** Автор: Mowshon ** Источник: live-code.ru ** ---------------------------------------- **/ class Caching { function __construct() { // Папка где хранятся кэшированные файлы $this->chache_dir = 'cache/'; // Расширение кэшированных файлов $this->chache_extension = '.html'; // Срок жизни кеша в секундах $this->cache_time = 3600; } // Просмотр содержимого кэш файла public public function view($File) { $CachedFile = $this->chache_dir.$File.$this->chache_extension; if(!$this->cacheExists($File)) { return; } else { include_once($CachedFile); } } // Проверяем если кэш файл существует private function cacheExists($File) { $CachedFile = $this->chache_dir.$File.$this->chache_extension; if(!file_exists($CachedFile)) { return 0; } else { return 1; } } // Проверка актуальности кэш файла public function isActualCache($File) { $CachedFile = $this->chache_dir.$File.$this->chache_extension; if( (@filemtime($CachedFile) + $this->cache_time) < mktime() ) { return 0; } else { return 1; } } // Сохраняем новые данные в кэш public function saveCache($File, $Content) { $CachedFile = $this->chache_dir.$File.$this->chache_extension; $CreateCacheFile = fopen($CachedFile, 'w+'); $Write = fwrite($CreateCacheFile, $Content); return $this->view($File); } // Удаление кэша public function deleteCache($File) { $CachedFile = $this->chache_dir.$File.$this->chache_extension; unlink($CachedFile); } } ?>
Метод function saveCache($File, $Content)
$File - Будущее имя кеш-файла
$Content - Содержимое кеш-файла
Метод создает новый файл или переписывает содержимое уже существовавшего
файла с таким же именем. После изменении со стороны метода saveCache,
метод isActualCache будет считать содержимое кэша актуальной так как
дата последнего изменения обновляется.
Метод function cacheExists($File)
Проверяет если в папке cache существует HTML файл с именем $File
Метод function isActualCache($File)
Переменная $this->cache_time хранит в себе время актуальности кэш-файла в
секундах. Если кеш-файл был создан/изменен более 3600сек(1 час) назад то
он считается просроченным и метод возвращает ноль(False) или
единицу(True) если время кеш-файла ещё не истекло.
Метод function view($File)
Проверяет если в папке cache существует HTML файл с именем $File потом открывает его содержимое.
Метод function deleteCache($File)
Удаляет кэш-файл с именем $File.
Посмотрим простой пример который работает с вышеупомянутом классом.
<?php include_once('class/Caching.php'); $Caching = new Caching; // Устанавливаем сами время актуальности кэша $Caching->cache_time = 120; // Проверяем если есть актуальный кэш if(!$Caching->isActualCache('my_cache')) { $Content = 'Кэш был создан: '.date("d.m.Y H:i:s"); echo $Caching->saveCache('my_cache', $Content); } else { echo $Caching->view('my_cache'); } ?>
Если будут вопросы задавайте их в комментариях ниже.
С наступающим новым 2012 годом!С новым годом!
Еще записи по теме
- PHP и Ruby on Rails: что лучше?
- Критерии выбора языка программирования
- [Решено!] Ошибка: Call to undefined function: curl_init() или нерабочий cURL
- Установка PHP с помощью Microsoft Web Platform Installer
- Работа с датой на PHP
- PHP: Постраничная навигация - вывод данных с использованием массива
- Преобразование HTML в PDF на PHP и html2pdf
Комментариев: 5
хароший класс!!!) только не понятно использование private + на него php ругается...
vasya, метод cacheExists является приватным т.к. не будет используется во время кэширования в программный код программиста. Он является помощником метода view.
А подробнее есть пример вставки данного класса на сайт?
Денис, пример есть в конце статьи, напишите какой момент работы класса Вам не ясен.
Все это очень приблизительно:
1. Нет обработки исключений.
2. Что будет, если у пользователя с правами которого работает процесс не будет хватать прав на запись файла?
3. Почему свойства класса не вынесены в начало класса? Что будет в случае $Caching->cache_time = -120?
Как общий принцип, может быть кому-то будет полезно, но лучше ориентироваться на промышленные решения.