Кэшировать данные веб-сайта имеет смысл в динамичных проектах, где есть необходимость в быстрой работы сайта с минимум потерей ресурсов. Возникает вопрос "Что нужно кэшировать?", кэшировать нужно то, что долго выполняется или использует всякий раз много ресурсов. Если у вас сайт-визитка или обычный HTML сайт то кэшировать данные посредством PHP нет смысла, так как принцип кэширования является следующим, превращение на время динамичную часть сайта в статическую т.е. любой временный файл которого мы будем открывать каждый раз когда будет доходить до выполнения нашего тяжелого участка кода.
Схема как работает кэширование данных:
Просмотрим класс который берет на себя ключевую роль в процессе кэширования данных в нашем примере и обсудим каждый метод класса в отдельности.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
<?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.
Посмотрим простой пример который работает с вышеупомянутом классом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?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 годом!
С новым годом!