A PHP Error was encountered

Severity: 8192

Message: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead.

Filename: mysql/mysql_driver.php

Line Number: 303

Кэширование данных в PHP - ускоряем выполнение страниц

Кэширование данных в PHP - ускоряем просмотр страниц

Автор: Mowshon.
Опубликовано 27 декабря 2011
в рубрике PHP, Примеры

Просмотров: 7904.
Подписаться на комментарии по RSS.

Кэширование данных в PHP - ускоряем просмотр страниц

Кэшировать данные веб-сайта имеет смысл в динамичных проектах, где есть необходимость в быстрой работы сайта с минимум потерей ресурсов. Возникает вопрос "Что нужно кэшировать?", кэшировать нужно то, что долго выполняется или использует всякий раз много ресурсов. Если у вас сайт-визитка или обычный 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 годом!С новым годом!

Комментариев: 5

  1. vasya | 12.01.2012 в 03:47:04 | #1

    хароший класс!!!) только не понятно использование private + на него php ругается...

  2. Mowshon | 12.01.2012 в 16:02:11 | #2

    vasya, метод cacheExists является приватным т.к. не будет используется во время кэширования в программный код программиста. Он является помощником метода view.

  3. Денис | 18.01.2012 в 11:09:54 | #3

    А подробнее есть пример вставки данного класса на сайт?

  4. Mowshon | 18.01.2012 в 23:10:08 | #4

    Денис, пример есть в конце статьи, напишите какой момент работы класса Вам не ясен.

  5. x3 | 03.04.2012 в 01:54:40 | #5

    Все это очень приблизительно:

    1. Нет обработки исключений.

    2. Что будет, если у пользователя с правами которого работает процесс не будет хватать прав на запись файла?

    3. Почему свойства класса не вынесены в начало класса? Что будет в случае $Caching->cache_time = -120?

    Как общий принцип, может быть кому-то будет полезно, но лучше ориентироваться на промышленные решения.

Оставьте комментарий!

Гость
Комментатор / хотите им стать

Чтобы стать комментатором введите email и пароль. Напишите комментарий. В дальшейшем ваша связка email-пароль, позволит вам комментировать и редактировать свои данные. Не забудьте про активацию (инструкция придет на ящик, указанный при регистрации).

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)