Публикация в группе: Otshelnik-Fm - мои работы (код, плагины, дополнения, статьи и руководства)

Категории группы: Работаем с Wp-Recall

 Всем привет.

В 14й версии появился встроенный механизм кеширования, но помимо этого, для разработчиков появился механизм "объектного" кеширования. Описание тут
Он заключается в том, что вы сами можете выделить тяжелые участки кода и закешировать их. В этой заметке я поделюсь, как я закешировал главную страницу сайта. Загнал в один объект кеширования 7 циклов. Которые довольно тяжелые. Но в тоже время они не обновляются ежеминутно и для авторизованного пользователя отдавать их вживую - кощунство по отношению к хостингу.
Я имел на главной от 110, до 115 запросов к базе данных. Тут я отступлю и скажу что сам код не проходил рефакторинг и 7 циклов можно было сократить. Но это заняло бы у меня больше времени на оптимизацию чем кеширование.

Итак было 110 запросов в живую и 1,838 секунд на получение первого get страницы.
После кеширования получил такие результаты: запросов 32, время 0,672 секунды.

Что кешировал на главной странице и почему такой выбор? Блок автора у меня выводится в хидере, поэтому, чтобы другим пользователям отдавать его "живым" с актуальными данными пользователя - я не включил его в кэш. Футер у меня не несет ничего кроме html, его я тоже не стал кешировать. Все остальное подверглось кешированию. Т.е. Закешировал всё, кроме пользовательских данных.

Читаем статью и делаем по ней. Этот пример оттуда.

Выводом контента на главную страницу у меня занимается файл index.php
Все то что я хотел кешировать я вынес в отдельный файл include-fo-home.php и подключил его в index.php. Мне это показалось проще - чтобы не дублировать этот код если функция не пройдет проверку.

<?php include (TEMPLATEPATH . '/header.php'); ?>
<?php
if(function_exists('wp_recall')){
	 //определяем объект кеширования
	$rcl_cache = new Rcl_Cache(3600);
	 
	//проверяем следует ли использовать кеширование 
	if($rcl_cache->is_cache){
	 
		//указываем уникальный ключ для кеш-файла
		$string = 'bff_my_home_page';
		
		//получаем данные кеш-файла по указанному ключу
		$file = $rcl_cache->get_file($string);
		
		//проверяем актуальность кеш-файла
		if(!$file->need_update){
			//возвращаем содержимое кеш-файла
			echo $rcl_cache->get_cache();
		} else {
			//проверяем используется ли кеш
			ob_start();
			include (TEMPLATEPATH . '/incl/include-fo-home.php');
			$twos_contents = ob_get_contents();
			ob_end_clean();
			if($rcl_cache->is_cache){
				//создаем или обновляем кеш-файл с сформированным контентом
				$rcl_cache->update_cache($twos_contents);
			}
			echo $twos_contents;
		}
	}
} else {
	include (TEMPLATEPATH . '/incl/include-fo-home.php');
}
?>
<?php include (TEMPLATEPATH . '/footer.php'); ?>

 

Смотря на код сверху вниз:
подключаем хидер
Проверяем, а включен ли у нас плагин wp-recall
Если не включен, то подключаем include-fo-home.php на 34 строке (про это дублирование я и говорил выше)
кеширование на час: new Rcl_Cache(3600)
на 22 строчке включаем буфер ob_start
и подключаем наш файл.
футер не включен в кеширование.

Механизм достаточно простой. 90% кода приведенного здесь - это из статьи по использованию кастомного кеширования.
Заметка показывает частный случай - но общий принцип показанный в ней, вам поможет начать кешировать ваши тяжелые объекты.

Здесь я не написал сброс кэша при публикации записи на сайте. Андрей это сделал ранее в своей статье.

Кэш лежит по пути /wp-content/uploads/rcl-uploads/cache/ и вы экспериментируя, можете через фтп клиент удалять его оттуда.

Спасибо Андрею за терпение и подсказки использования кеширования.

В следующей заметке я вам покажу пример кеширования комментариев, сброса кэша при публикации нового комментария и мой выход из ситуации, когда комментарии разбиваются более чем на одну страницу.

p.s. я не использовал на сайте плагины кеширования. Там ситуация такая, что кэш отдается гостям, а авторизованным пользователям отдается все та же живая версия сайта.
Но есть плагины кеширования которые и этот момент учитывают и отдают авторизованным кэш исключая некоторые динамические объекты. С такими плагинами я не разбирался - мне интересен метод от плагина wp-recall. Зачем ставить еще один плагин? wp-recall справляется, надо лишь правильно подойти к этому вопросу.

2

Автор публикации

не в сети 2 часа

Вова (Otshelnik-Fm)

4 506
Живой, бодрый, полон идей!
Комментарии: 2252Публикации: 250Регистрация: 27-01-2013Продаж/Покупок: 0/0